ファイル構造:
Col1|Col2|Col3|Col4
123|456|abcdefg
Tel.: 689346589934, xyz
lckhasfkl|abc
「col3」から改行文字を削除したい。提案してください
答え1
$ sed -e :1 -e '/|.*|.*|/!{N;b1' -e '}' -e 's/\n/ /g' < your-file
Col1|Col2|Col3|Col4
123|456|abcdefg Tel.: 689346589934, xyz lckhasfkl|abc
またはawk
均等に:
awk -F '|' '{while (NF<4) {getline more; $0 = $0 " " more};print}' < your-file
両方得る|
次の行を入力して行に追加し、行に少なくとも3文字(4つのフィールド)が含まれていない限り、スペースを追加します。
他のフィールド(4番目のフィールドを除く、そうでなければ新しいレコードが始まる場所が不明)に改行文字を含めることができ、3番目のフィールドの改行文字のみを置き換えたい場合:
sed '
:1
/|.*|.*|/!{
N;b1
}
:2
s/\n\([^|]*|[^|]*$\)/ \1/
t2' < your-file
または:
awk -F '|' -v OFS='|' '
{
while (NF < 4) {getline more; $0 = $0 "\n" more}
gsub("\n", " ", $3)
print
}' < your-file
答え2
その他sed
:
sed -e:d -e's/|/|/3;t' -e'N;s/\n//;td' < in >out
sed
ループは、1行の3番目のパイプ文字を自分で置き換えることによって実装されます。交換がt
成功すると、sed
分岐が残り、パターンスペースが自動的に印刷され、スクリプトは次の入力行(ある場合)から上から始まります。ただし、失敗すると、ext 行がパターン空間にsed
追加され、途中で改行区切り文字が置き換えられます。その後、2番目のestが渡され、elimタグに分岐され、3番目のパイプが再検索されます。N
s///
t
sed
:d