複数のファイルに特定の単語(例ではSearchWord)が最後に表示される前に、数行のテキストを追加する必要があります。
- 検索では大文字と小文字を区別する必要があります。
- その単語はファイルの複数行に表示されます。
ファイルの既存データ
SearchWord abc defgh
SEARCHWORD abc1234
sEarchWord abcd
sometext 1
sometext 2
希望の出力
SearchWord abc defgh
SEARCHWORD abc1234
NEWLINE_1_ADDED
NEWLINE_2_ADDED
NEWLINE_3_ADDED
sEarchWord abcd
sometext 1
sometext 2
ベストアンサー1
ex
POSIXファイルエディタの使用
ex
ファイルエディタの非視覚的な形式ですvi
。実際にはvi
。 vi
(およびVim)以前でもex
コマンドを使用します。コロンを入力してコマンドを入力するたびに、これはコマンドですex
(Vimには多くのカスタム拡張がありますが)。
ex
開封後みんなSed や Awk とは異なり、アドレッシングはストリームで動作するのではなく前後に発生する可能性があります。
この特定の編集では、次の行を使用します。
printf '%s\n' 'set ignorecase' '$+?searchword?i' 'NEWLINE_1_ADDED' 'NEWLINE_2_ADDED' 'NEWLINE_3_ADDED' . x | ex input.txt
コマンドをテストするには(ファイルに保存するのではなく標準出力として印刷する)、最後のコマンドとして%p
代わりに使用します。x
printf '%s\n' 'set ignorecase' '$+?searchword?i' 'NEWLINE_1_ADDED' 'NEWLINE_2_ADDED' 'NEWLINE_3_ADDED' . %p | ex input.txt
複数のファイル処理:
for f in *.txt; do
printf '%s\n' 'set ignorecase' '$+?searchword?i' 'NEWLINE_1_ADDED' 'NEWLINE_2_ADDED' 'NEWLINE_3_ADDED' . x | ex "$f"
done
説明する
コマンド自体を実行すると、printf
次のコマンドが渡されるのがわかりますex
。
set ignorecase
$+?searchword?i
NEWLINE_1_ADDED
NEWLINE_2_ADDED
NEWLINE_3_ADDED
.
x
コマンドset
は説明を必要としません。
$+
ラインを指す後ろに最後の行は、?...?
そこから戻る検索を示します。 (これにより、+
最後の行が一致するファイルが正しく処理される可能性があります。) i
テキスト「挿入」を意味します。今後ラインを見つけてください。
行.
自体は挿入するテキストを終了します。
x
保存と終了。