最初に次の厄介なPythonコードを見てください
4. import random
5.
6.
7. def rabinMiller(num):
8. # Returns True if num is a prime number.
9.
10. s = num - 1
11. t = 0
12. while s % 2 == 0:
これは、インターネットからコピーされたpythonコードの始まりです。形式は非常に紛らわしく、行番号があり、空白行とスペースが多すぎます。この種の直接コピーコードは直接実行できないため、これらの不要な記号を手動で配置する必要があります。削除:数百行または数千行のコードで、手動で問題を削除しすぎると、テキストエディターの置換機能を使用しても、目標をうまく達成できない場合があります。これは、sedがその才能を発揮する時です。
- 空白行を削除します(Pythonコードブロックの場合、空白行はエラーを生成します)
- 行番号を削除して、コードを左揃えにします
- メモを削除します(#記号で始まる行)
sed -e 's/^...//g' -e '/^$/d' -e '/^\s*#/d' -e 's/^.//g' tt.txt
上記のコードは、-eパラメーターを介して4つのsedコマンドを指定します。これらのコマンドは、各行の先頭にある最初の3文字(行番号)をそれぞれ削除し、空白行を削除し、#記号で始まる注釈行を削除します(\ sはスペース文字を表します)。行の最初の文字は左寄せです。次に、標準のPythonコード形式を取得しました。
import random
def rabinMiller(num):
s = num - 1
t = 0
while s % 2 == 0:
{}:ネストされたsedコマンド
より複雑なsedコマンドの場合は、中括弧を使用して、上記のPythonコードなど、さまざまなコマンドをグループ化できます。コードを4〜100行に整理する場合は、最初に行範囲を指定してから、中括弧を使用してグループ化できます。さまざまなsedコマンドが組み合わされています。
sed -n '
4,100{
s/^...//g
/^$/d
/^\s*#/d
s/^.//g
p
}
`
r:ファイルを読み取る
ここでは、デモンストレーション用に2つのファイルが必要です。次のように、別のテキストファイルexample1.txtを作成します。
The other test file.
ID 0000124
Test END!
example.txtファイルの2行目にファイルexemple1.txtを挿入する場合
sed '2r example1.txt' example.txt
# This is a test file.
# It is the last day of 2018.
# The other test file.
# ID 0000124
# Test END!
# Hope all you success!
# HAPPY NEW YEAR!
example.txtファイルの最後の行に挿入する場合
sed '$r example1.txt' example.txt
番号8行の後にファイルを挿入する場合
sed '/8/r example1.txt' example.txt
# This is a test file.
# It is the last day of 2018.
# The other test file.
# ID 0000124
# Test END!
# Hope all you success!
# HAPPY NEW YEAR!
aまたはi:文字列行を追加
たとえば、example.txtファイルの2行目の後(a)または前(i)に「これはファイルの真ん中です」という行を追加します。
sed '2a THIS is the middle of the file' example.txt
# This is a test file.
# It is the last day of 2018.
# THIS is the middle of the file
# Hope all you success!
# HAPPY NEW YEAR!
sed '2i THIS is the middle of the file' example.txt
# This is a test file.
# THIS is the middle of the file
# It is the last day of 2018.
# Hope all you success!
# HAPPY NEW YEAR!
aとiはどちらも行を追加できますが、違いは、指定された行の後に(追加)が追加され、指定された行の前にi(挿入)が追加されることです。
c:行を変更します
たとえば、example.txtファイルの2行目を「2019年の最初の日です」に変更する場合は、c(change)パラメーターを使用して変更できます。
sed '2c It is the first day of 2019' example.txt
# This is a test file.
# It is the first day of 2019
# Hope all you success!
# HAPPY NEW YEAR!
"=":出力行番号
以前にawkを学び、「wc -l」と組み合わせると、ファイルの行数を出力できます。
wc -l example.txt | awk '{print $1}'
# 4
もちろん、より簡単な方法は、「=」を使用してsedの行番号を出力することです。使用法は次のとおりです。
sed -n '$=' example.txt
# 4
「H」で始まる行数を出力するなど、特定の条件を満たす行を除外することもできます。
sed -n '/^H/=' example.txt
# 3
# 4
y:変換文字
たとえば、すべての「a」を「A」に変換するには、次のようにします。
sed 'y/a/A/' example.txt
# This is A test file.
# It is the lAst dAy of 2018.
# HopeAll you success!
# HAPPY NEW YEAR!
l:表示制御文字
通常は表示されないテキスト制御文字を表示して、バグを探すときに特に便利です。
sed -n 'l' example.txt
# This is a test file.$
# It is the last day of 2018.$
# Hope all you success!$
# HAPPY NEW YEAR!$
各行の終わりに「$」が追加され、行の終わりを示します。
100回の読書は1回の練習よりも優れています
=====終わり====