接頭辞と接尾辞(複数行)の間の内容だけを削除したいと思います。私のプレフィックスとサフィックスは削除しないでください。
私はこれを試しましたが、私のプレフィックスとサフィックスは削除されました。
sed -i "/prefix =/,/suffix =/d" myfile.txt
コンテンツ:
prefix = Content that i want to delete.
That includes multiple lines as
well as ASCII characters.
suffix = ,
出力:
prefix =
suffix = ,
答え1
1つの可能な方法は、awkを使用して=
フィールド区切り文字として使用することです。
$ awk -F'=' 'BEGIN{OFS="=";};/^prefix/{$2=""; print; noprint=1};/^suffix/{noprint=0;print};noprint{next;};' input.txt
prefix =
suffix = ,
サフィックスの前後に別のコンテンツを取得するには、少し変更して同じ方法を使用できます。
$ awk -F'=' '/^prefix/{$2=""; printf "%s%s\n",$1,FS; noprint=1};/^suffix/||!noprint{noprint=0;print};noprint{next;};' input.txt
things beforeprefix
prefix =
suffix = ,
things after suffix
もちろん、次のように短縮できます。
$ awk 'BEGIN{FS=OFS="=";};/^prefix/{p=1;$2="";print};/^suffix/{p=0};!p' input.txt
things beforeprefix
prefix =
suffix = ,
things after suffix
答え2
次のコマンドを試してみましたが、正常に動作しました。
sed -n '/prefix/,/suffix/p' file.txt| awk '/prefix/||/suffix/{print $0}'| sed '/prefix = /s/=.*/=/g' >file_tmp.txt && mv file_tmp.txt file.txt
出力
prefix =
suffix = ,
答え3
ファイルの行を編集するには、次のコマンドを送信しますed
。
printf '%s\n' '/^prefix =/+1,/^suffix =/-1d' '1,$s/^prefix = .*/prefix =/' 'wq' |ed -s myfile.txt
これは改行で区切られた3つのコマンドを送信します(オプションを使用してmyfile.txtをed
起動して自動的に処理するように指示します)。-s
/^prefix =/+1,/^suffix =/-1d
- 範囲の行を削除する:「prefix =
行の先頭に一致する行の後の行」〜「行の先頭に一致するsuffix =
行の前の行」1,$s/^prefix = .*/prefix =/
- 検索と置換:ファイルの各行から行prefix =
の先頭にあるパターンをテキストに置き換えたり、何も入れたりしません。prefix =
wq
-w
ファイルをディスクに書き戻してq
終了します。ed
これはファイルと希望の翻訳についていくつかの仮定をします。
prefix
theとサフィックスの間には少なくとも1行が必要です。prefix =
すべての末尾のテキストを削除したい- 「セクション」が1つしかないので、
prefix
更新するsuffix
必要があります。
答え4
あなたの要件に応じてこれを試すことができます:
$ sed -ne '
/^\(prefix =\).*/,/^\(suffix =.*\)/!p
s//\1/p
' myfile.txt