与えられたパターンを含む行の後のすべての改行文字をタブ文字に置き換えたいと思います。
入力ファイル:
$ cat File1
NAME1
N1_info
NAME2
N2_info
将来の「タブ」の末尾にいくつかのフラグを作成します。
sed '/^NAME/s/$/\*/g; /^NAME/!{s/^/+/g}' File1.txt > File2.txt
$ cat File2
NAME1*
+N1_info
NAME2*
+N2_info
次に、目的の出力を得るために「フラグ」の間の文字を削除します。私は2つのsedモードを試しましたが、どちらも「File2」を変更しませんでした。
head File2 | sed -e 's/\(\*\).*\(+\)/\1\t\2/g'
head File2 | sed -n '/\*/,/+/p'
出力は次のようになります。
$ cat File3
NAME1 N1_info
NAME2 N2_info
答え1
これが実際のデータであれば、
paste - - < File1 > File3
あなたが必要なすべてです。デフォルトでは、貼り付けはタブ文字を区切り文字として使用します。
「N1_info」に実際に複数の行がある場合、これは解決策ではありません。私はそれをします:
perl -0777 -pe 's/\*\n\+/\t/g' File2 > File3
答え2
そしてsed
:
$ sed '/^NAME/{$!N;s/\n/\t/}' file
NAME1 N1_info
NAME2 N2_info