一緒にsedを学ぶ(3)

最初に次の厄介な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を学ぶ(3)

{}:ネストされたsedコマンド

より複雑なsedコマンドの場合は、中括弧を使用して、上記のPythonコードなど、さまざまなコマンドをグループ化できます。コードを4〜100行に整理する場合は、最初に行範囲を指定してから、中括弧を使用してグループ化できます。さまざまなsedコマンドが組み合わされています。

sed -n '
    4,100{
        s/^...//g
        /^$/d
        /^\s*#/d
        s/^.//g
        p
    }
`

一緒にsedを学ぶ(3)

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!

一緒にsedを学ぶ(3)

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(挿入)が追加されることです。

一緒にsedを学ぶ(3)

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!

一緒にsedを学ぶ(3)

"=":出力行番号

以前に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

一緒にsedを学ぶ(3)

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!

一緒にsedを学ぶ(3)

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回の練習よりも優れています

=====終わり====

参考資料:http//www.grymoire.com/Unix/Sed.html#uh-30

一緒にsedを学ぶ(3)

おすすめ

転載: blog.51cto.com/15069450/2577350