パターンで始まる行の末尾から新しい行を置き換える [重複]

パターンで始まる行の末尾から新しい行を置き換える [重複]

私のUbuntuコンピュータにファイルがあり、「@」を使用して特定の行の先頭をマークしました。

@A
bbb
@B
bbb
@D
ccc

上記のファイルになるように、「@」で始まる行の末尾から新しい行を削除したいと思います。

@Abbb
@Bbbb
@Dccc

sed を使用して @ で始まる行を一致させることができます。

sed /^@/ ...

しかし、文字列の末尾にある改行文字を削除する方法を見つけようとしています。sedテキストエディタで手動でファイルを開いて直接削除することなく、これを簡単に行う方法が必要です。

ベストアンサー1

$ printf '%s\n' 'g/^@/j' ',p' 'Q' | ed -s file
@Abbb
@Bbbb
@Dccc

上記は短いスクリプトを使用して、ed正規表現に一致するファイルの各行を後の行に^@関連付けます。その後、編集バッファのすべての行を印刷し、保存せずに終了します。


$ sed '/^@/ { N; s/\n//; }' file
@Abbb
@Bbbb
@Dccc

sed現在の行が一致すると、このコマンドは次の行を入力バッファに追加します^@。挿入された改行文字が削除され、その行が印刷されます。

@どちらのバリエーションも、その行が直後に来ると、その行で始まる行を見逃します。これは彼らが次に向かうことを意味します。

@1
@2
X
@3
Y

入力する

@1@2
X
@3Y

代わりに

@1@2X
@3Y

これが大丈夫かどうかは不明です。

おすすめ記事