如果我运行命令cat文件| grep pattern,我将得到许多行输出。如何将所有行连接成一行,有效地将每个“\n”替换为“\”(以“”结尾,后面加空格)?
Cat文件| grep模式| xargs sed s/\n/ /g 对我没用。
如果我运行命令cat文件| grep pattern,我将得到许多行输出。如何将所有行连接成一行,有效地将每个“\n”替换为“\”(以“”结尾,后面加空格)?
Cat文件| grep模式| xargs sed s/\n/ /g 对我没用。
当前回答
可能最好的方法是使用“awk”工具,它将生成输出到一行
$ awk ' /pattern/ {print}' ORS=' ' /path/to/file
它将使用空格分隔符将所有行合并为一行
其他回答
粘贴-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,
循环地,对于每个' - '的实例。
使用tr '\n' ' '将所有换行符转换为空格:
$ grep pattern file | tr '\n' ' '
注:grep读取文件,cat连接文件。不要cat文件| grep!
编辑:
Tr只能处理单个字符的转换。您可以使用awk更改输出记录分隔符,如下所示:
$ grep pattern file | awk '{print}' ORS='" '
这将转化为:
one
two
three
to:
one" two" three"
在不带引号的bash echo中,删除回车符、制表符和多个空格
echo $(cat file)
我所知道的解决这个问题最快最简单的方法是:
当我们想用空格替换新的行字符\n时:
xargs < file
Xargs对每行字符数和所有字符的总和有自己的限制,但我们可以增加这些限制。详细信息可以通过运行命令:xargs——show-limits和手册:man xargs找到
当我们想用一个字符替换另一个字符时:
tr '\n' ' ' < file
当我们想用多个字符替换一个字符时:
tr '\n' '~' < file | sed s/~/many_characters/g
首先,我们将换行符\n替换为波浪号~(或选择文本中没有出现的另一个唯一字符),然后我们将波浪号替换为任何其他字符(many_characters),并对每个波浪号执行此操作(标记g)。
这可能就是你想要的
cat file | grep pattern | paste -sd' '
至于你的编辑,我不确定是什么意思,也许是这个?
cat file | grep pattern | paste -sd'~' | sed -e 's/~/" "/g'
(这里假设~不会出现在文件中)