如果我运行命令cat文件| grep pattern,我将得到许多行输出。如何将所有行连接成一行,有效地将每个“\n”替换为“\”(以“”结尾,后面加空格)?
Cat文件| grep模式| xargs sed s/\n/ /g 对我没用。
如果我运行命令cat文件| grep pattern,我将得到许多行输出。如何将所有行连接成一行,有效地将每个“\n”替换为“\”(以“”结尾,后面加空格)?
Cat文件| grep模式| xargs sed s/\n/ /g 对我没用。
当前回答
在red hat linux上,我只使用echo:
Echo $(cat /some/file/name)
这将在一行中给出文件的所有记录。
其他回答
在不带引号的bash echo中,删除回车符、制表符和多个空格
echo $(cat file)
这可能就是你想要的
cat file | grep pattern | paste -sd' '
至于你的编辑,我不确定是什么意思,也许是这个?
cat file | grep pattern | paste -sd'~' | sed -e 's/~/" "/g'
(这里假设~不会出现在文件中)
粘贴-sd ` ~ `出错。
下面是我在使用bash的mac上使用的方法
cat file | grep pattern | paste -d' ' -s -
从男人膏。
-d list Use one or more of the provided characters to replace the newline characters instead of the default tab. The characters
in list are used circularly, i.e., when list is exhausted the first character from list is reused. This continues until
a line from the last input file (in default operation) or the last line in each file (using the -s option) is displayed,
at which time paste begins selecting characters from the beginning of list again.
The following special characters can also be used in list:
\n newline character
\t tab character
\\ backslash character
\0 Empty string (not a null character).
Any other character preceded by a backslash is equivalent to the character itself.
-s Concatenate all of the lines of each separate input file in command line order. The newline character of every line
except the last line in each input file is replaced with the tab character, unless otherwise specified by the -d option.
If ‘-’ is specified for one or more of the input files, the standard input is used; standard input is read one line at a time,
循环地,对于每个' - '的实例。
我喜欢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
在red hat linux上,我只使用echo:
Echo $(cat /some/file/name)
这将在一行中给出文件的所有记录。