sed
特定の単語を含む行全体を置き換えようとしています。そして最後に改行文字があります。テストファイルは次のとおりです。
this # target for substitution
this is a test
another test?
今私に解放するここからそしてここから接続済みPost、どういうわけかこれを行う方法を理解します。
sed 's/^this$/test/g' testfile
これは効果があるか、少なくともそうです。なぜなら単語の末尾の改行文字this
はそのまま残ります。
test # target for substitution but newline is still there
this is a test
another test?
上記の内容を見ると、知っている sed
改行文字を直接一致させる方法はありません(一部のバージョンでは「\ n」を使用できることを覚えていますが、sed
これは要点ではありません)。
私は少なくとも全体の単語/行と改行文字を削除する方法を知っています。
sed '/^this$/d' testfile
しかし、代わりに使用する必要があります。
どうすればいいですか? (sed
最大)
答え1
this
test
私が理解しているところによると、単語と改行文字だけで構成される行を変更したいので
foo
this
this is a test
しなければならない
foo
testthis is a test
sed
次の行に参加し、N
改行文字の前のすべての内容を変更するだけです。
sed '/^this$/{N;s/.*\n/test/;}'
答え2
ここで使用することをお勧めします。構文はperl
この例と変わりません。sed
$ cat ip.txt
this
this is a test
another test?
$ perl -pe 's/^this\n/XYZ/' ip.txt
XYZthis is a test
another test?
答え3
GNU sedを使用すると、すべての行をメモリに読み込んで-z
そこから一致させることができます。たとえば、次のようになります。
sed -z 's/this\n/test/'
答え4
awkを使用する1つの方法は、次を操作してレコード区切り文字を出力することです。
$ awk '{ ORS = sub(/^this$/,"FOO") ? "" : RS }1' file
$ sed -e '
$!N
s/^this\n/FOO/;t
P;D
' file