如果运行命令cat file | grep pattern
,则会得到多行输出。您如何将所有行连接成一行,有效地将每一行替换"\n"
为"\" "
("
以空格结尾)?
cat file | grep pattern | xargs sed s/\n/ /g
对我不起作用。
如果运行命令cat file | grep pattern
,则会得到多行输出。您如何将所有行连接成一行,有效地将每一行替换"\n"
为"\" "
("
以空格结尾)?
cat file | grep pattern | xargs sed s/\n/ /g
对我不起作用。
Answers:
使用tr '\n' ' '
翻译所有换行符为空格:
$ grep pattern file | tr '\n' ' '
注意:grep
读取文件,cat
连接文件。不要cat file | grep
啦!
编辑:
tr
只能处理单字符翻译。您可以awk
用来更改输出记录分隔符,例如:
$ grep pattern file | awk '{print}' ORS='" '
这将改变:
one
two
three
至:
one" two" three"
echo ""
在末尾添加以在提示文本之前添加新行。
"
,它显示为one" two" three"
,但是我希望它显示为one" two" three
。请注意,最后三个没有括号。有任何想法吗?
sed '$s/..$//'
传送到其中以删除最后一行的最后2个字符。
--delete
选项,因为默认情况下需要两个参数。例如tr --delete '\n'
。
这可能就是你想要的
cat file | grep pattern | paste -sd' '
至于您的编辑,我不确定这意味着什么,也许是这样吗?
cat file | grep pattern | paste -sd'~' | sed -e 's/~/" "/g'
(这假定~
不会在中发生file
)
cat file
它将实际上是cat
,甚至是文件。(我只是保留了与问题无关的那部分,因此保持不变)
当我们要用空格替换换行符时 :\n
xargs < file
xargs
每行的字符数和所有字符的组合数都有自己的限制,但是我们可以增加它们。可以通过运行以下命令找到详细信息:xargs --show-limits
当然可以在手册中找到:man xargs
当我们想将一个字符替换为另一个正好一个字符时:
tr '\n' ' ' < file
当我们想用多个字符替换一个字符时:
tr '\n' '~' < file | sed s/~/many_characters/g
首先,我们将换行符替换\n
为波浪号~
(或选择文本中不存在的另一个唯一字符),然后将波浪号字符替换为任何其他字符(many_characters
),然后对每个波浪号(flag g
)进行替换。
可能最好的方法是使用“ awk”工具,它将生成输出到一行
$ awk ' /pattern/ {print}' ORS=' ' /path/to/file
它将使用空格分隔符将所有行合并为一
{print}
因为它是awk的默认操作。
在红帽linux上,我只使用echo:
回声$ {cat / some / file / name)
这样我就可以在一行上找到文件的所有记录。
sed
脚本放在单引号中,以使Bash不会弄乱它(因为sed s/\n/ /g
调用sed
带有两个参数,即s/n/
和/g
);(2)既然你想的输出cat file | grep pattern
是输入到sed
,而不是争论到sed
,你需要消除xargs
; (3)cat
此处不需要,因为grep
可以将文件名作为第二个参数。因此,您应该尝试过grep pattern file | sed 's/\n/ /g'
。(在这种情况下,由于上面的链接中给出的原因,它不会起作用,但是现在您知道未来了。)