位置を特定し、sedを使用して変更を加える


11

このスクリプトは、sedを使用してすべての「」を「新しいもの」に変更します。yyyの後の「」だけをどのように変更しますか:sedなどを使用しますか?

cat >sample.txt <<EOF
xxx:
""
yyy:
""
}
EOF
sed --expression='s/""/"new stuff"/' sample.txt

回答:


8

あなたの質問が理解できないかもしれません。「yyy」の後の値のみを置換する場合は、前の回答を使用します。「yyy」の後の任意の値を置き換える場合は、次の1行を試してください。

sed --expression='/yyy/,$ s/""/"new stuff"/g' sample.txt

テストしていない:D ...


3

O'Reilly-Sed&Awkの2ページ目の追加ページ152から回答

ファイルにスクリプトを書く

/yyy\:$/{
N
s/yyy\:\n\"\"/yyy\:\
\"new stuff\"/
}

これを通常の方法でデータに適用します

sed -f script sample.txt

このスクリプトは、yyy:を探します。見つかったら、別の行をパターンバッファーに読み込みます(Star Trek Transporterのような音)。結合された行でas /コマンドを実行します。したがって、yyy:newline ""を探しています。見つかった場合は、yyyに置き換えます。\バックスラッシュの実際の改行に注意してから、「新しいもの」

幸運を


1
manページを参照してください。unixhelp.ed.ac.uk/CGI/man-cgi?sed アドレス段落の検索

1

あるレベルの複雑さを超えたら、perlに切り替えます。s2pは、現在のsedソリューションの翻訳を処理します。または、簡単にゼロから作成することもできます。検索/置換式は変わりません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.