如何從每三行刪除一個新行分隔符。 例子:bash-刪除 n每三行
輸入:
1
name
John
2
family
Grady
3
Tel
123456
輸出:
1
name John
2
family Grady
3
Tel 123456
如何從每三行刪除一個新行分隔符。 例子:bash-刪除 n每三行
輸入:
1
name
John
2
family
Grady
3
Tel
123456
輸出:
1
name John
2
family Grady
3
Tel 123456
這可能會爲你工作(GNU SED):
sed 'n:N;s/\n/ /' file
作爲替代使用膏體:
paste -sd'\n \n' file
您能否詳細說明'n; N'部分? – 2014-10-09 06:09:54
@AvinashRaj問題說'bash-刪除\ n每三行'它不會說用空格替換'\ n'。 – potong 2014-10-09 06:12:59
根據預期輸出進行了評論。 – 2014-10-09 06:14:16
假設所有那些你想加入下一個一端與:
(您原問題)線:
1
name:
John
2
family: Grady
3
Tel:
123456
您可以使用sed
爲此,有:
sed ':a;/:$/{N;s/\n//;ba}'
的a
是分支標籤。檢測到模式:$
(冒號在行尾),如果找到N
將把下一行追加到當前行,則使用s/\n//
替換命令刪除它們之間的換行符,並使用ba
命令將其分支回標籤a
。
爲了您編輯問題,你只是想不理會每個三線組的第二和第三線面相結合的內容:
1
name
John
2
family
Grady
3
Tel
123456
用途:
sed '{n;N;s/\n/ /}'
在該命令序列中,n
將輸出組中的第一行並將其替換爲第二行。然後N
會將第三行附加到第二行,並且s/\n/ /
將在它們之間的換行符在最終輸出組合的二三行之前變爲空格。
然後它進入下一個三人組,並做同樣的事情。
這兩個命令都會爲它們各自的輸入生成所需的輸出。
+1爲sed命令解釋.. – 2014-10-09 06:39:44
如果有四個詞,比如'1 SOMETHING name John',我們打算用它們做同樣的事情,我們怎麼用'n '和'N'? – 2014-10-09 08:36:56
@Mandar,你應該問一個不同的問題,因爲它會獲得比隱藏在評論中的更多的風險。 – paxdiablo 2014-10-09 08:53:21
awk 'NR%3==2{printf "%s ",$0;next}{print $0}' input.txt
sed 'n;N;s/\n//' file
與空間的使用,以更換新行
輸出:
1
name John
2
family Grady
3
Tel 123456
你可以在Perl做到這一點,
$ perl -pe 's/\n/ /g if $. % 3 == 2' file
1
name John
2
family Grady
3
Tel 123456
又一解決方案,在擊:用AWK
while read line
do
if [[ $line = *: ]]
then
echo -n $line
else
echo $line
fi
done < input.txt
方式一:
awk '{ printf "%s%s", $0, (NR%3==2 ? FS : RS) }' file
Unix的方式:
$ paste -sd'\n \n' input
輸出:
1
name John
2
family Grady
3
Tel 123456
你確定後'你輸入樣本2'是一致的?另一種解決方案可能是刪除所有在':'之後的'\ n'。 – reto 2014-10-09 05:57:56
對不起!我有點昏昏欲睡:D – ahb65 2014-10-09 06:04:14