sedを使用して2つのパターン間の文字を置き換える

sedを使用して2つのパターン間の文字を置き換える

与えられたパターンを含む行の後のすべての改行文字をタブ文字に置き換えたいと思います。

入力ファイル:

$ 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

関連情報