[英]How to concatenate multiple lines of output to one line?
如果我運行命令cat file | grep pattern
cat file | grep pattern
,我得到多行輸出。 如何將所有行連接成一行,有效地將每個"\\n"
替換為"\\" "
(以"
后跟空格結尾)?
cat file | grep pattern | xargs sed s/\\n/ /g
cat file | grep pattern | xargs sed s/\\n/ /g
對我不起作用。
使用tr '\\n' ' '
將所有換行符轉換為空格:
$ grep pattern file | tr '\n' ' '
注意: grep
讀取文件, cat
連接文件。 不要cat file | grep
cat file | grep
!
編輯:
tr
只能處理單個字符的翻譯。 您可以使用awk
更改輸出記錄分隔符,例如:
$ grep pattern file | awk '{print}' ORS='" '
這將轉變:
one
two
three
到:
one" two" three"
在沒有引號的 bash echo
刪除回車、制表符和多個空格
echo $(cat file)
這可能是你想要的
cat file | grep pattern | paste -sd' '
至於您的編輯,我不確定這意味着什么,也許是這個?
cat file | grep pattern | paste -sd'~' | sed -e 's/~/" "/g'
(這假設~
不會出現在file
)
這是一個生成由逗號分隔的輸出的示例。 您可以用您需要的任何分隔符替換逗號。
cat <<EOD | xargs | sed 's/ /,/g'
> 1
> 2
> 3
> 4
> 5
> EOD
產生:
1,2,3,4,5
當我們想用空格替換換行符\\n
時:
xargs < file
xargs
對每行的字符數和所有字符的組合數有自己的限制,但我們可以增加它們。 可以通過運行以下命令找到詳細信息: xargs --show-limits
,當然在手冊中: man xargs
當我們想用另一個恰好一個字符替換一個字符時:
tr '\n' ' ' < file
當我們想用多個字符替換一個字符時:
tr '\n' '~' < file | sed s/~/many_characters/g
首先,我們將換行符\\n
替換為波浪號~
(或選擇文本中不存在的另一個唯一字符),然后我們用任何其他字符( many_characters
)替換波浪號字符,並對每個波浪號(標志g
)進行替換.
我喜歡xargs
解決方案,但如果不折疊空格很重要,那么人們可能會這樣做:
sed ':b;$!{N;bb};s/\n/ /g'
這將替換空格的換行符,而不像tr '\\n' ' '
那樣替換最后一行終止符。
這也允許您使用除空格之外的其他連接字符串,如逗號等,這是xargs
無法做到的:
$ seq 1 5 | sed ':b;$!{N;bb};s/\n/,/g'
1,2,3,4,5
這是使用awk
另一種簡單方法:
# cat > file.txt
a
b
c
# cat file.txt | awk '{ printf("%s ", $0) }'
a b c
此外,如果您的文件有列,這提供了一種僅連接某些列的簡單方法:
# cat > cols.txt
a b c
d e f
# cat cols.txt | awk '{ printf("%s ", $2) }'
b e
可能最好的方法是使用“awk”工具,它將輸出生成為一行
$ awk ' /pattern/ {print}' ORS=' ' /path/to/file
它將所有行合並為一個帶有空格分隔符的行
在紅帽 linux 上,我只使用 echo :
echo $(cat /some/file/name)
這給了我一個文件的所有記錄在一行上。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.