ねえ、「ファイル」の2行目と3行目を入れ替えて3行連続でマージする必要があります:
$cat file
Object Name: A
comments: comment A
manual_encdomain: Name: A
Object Name: B
comments: comment B
manual_encdomain: Name: B
したがって、以下の出力の代わりに:
$sed 'N;N;s/n/ /g' file
Object Name: A comments: comment A manual_encdomain: Name: A
Object Name: B comments: comment B manual_encdomain: Name: B
むしろこれが必要です
Object Name: A manual_encdomain: Name: A comments: comment A
Object Name: B manual_encdomain: Name: B comments: comment B
sed、awk何でも
承認された回答:
はい、sedを使用して行を入れ替えることができます:
$ sed -E 'N;N;s/n([^n]*)n([^n]*)/ 2 1/' file
Object Name: A manual_encdomain: Name: A comments: comment A
Object Name: B manual_encdomain: Name: B comments: comment B
または、同等に:
$ sed 'N;N;s/n([^n]*)n([^n]*)/ 2 1/g' file
Object Name: A manual_encdomain: Name: A comments: comment A
Object Name: B manual_encdomain: Name: B comments: comment B
仕組み:
-
-E
これにより、拡張正規表現がオンになります。 (
-E
BSD(OSX)sedと最新のGNUsedの両方で動作します。 GNU sedの古いバージョンの場合は、-r
を使用します 代わりに。)拡張正規表現がない場合は、
(
をエスケープする必要があります および)
上記のように。 -
N;N
これは2行目と3行目を読み取ります。
-
s/n([^n]*)n([^n]*)/ 2 1/
これにより、2行目と3行目が入れ替わります。
n([^n]*)
の最初の出現 2行目をキャプチャし、キャプチャグループ1に保存します。n([^n]*)
の2番目のオカレンス 3行目をキャプチャし、キャプチャグループ2に保存します。置換テキスト2 1
改行をスペースに置き換えながら位置を入れ替えます。
余分な空白を削除する
2行目と3行目は、入力ファイルでインデントされています。その余分な空白を削除したい場合:
$ sed -E 'N;N;s/n[[:blank:]]*([^n]*)n[[:blank:]]*([^n]*)/ 2 1/g' file
Object Name: A manual_encdomain: Name: A comments: comment A
Object Name: B manual_encdomain: Name: B comments: comment B
[[:blank:]]
空白とタブを照合するためのUnicodeで安全な方法です。
Linux –なぜArchlinuxはパッケージのアンインストール後に一部のユーザー/グループを保持するのですか?
Ssh上で実行される自動的に実行されるcronジョブのキーには、パスフレーズが必要ですか?