ファイル内の最後に一致する検索語の前にテキストを追加します。

ファイル内の最後に一致する検索語の前にテキストを追加します。

複数のファイルに特定の単語(例では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

exPOSIXファイルエディタの使用

exファイルエディタの非視覚的な形式ですvi。実際にはvivi(および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保存と終了。

おすすめ記事