如果我运行命令cat文件| grep pattern,我将得到许多行输出。如何将所有行连接成一行,有效地将每个“\n”替换为“\”(以“”结尾,后面加空格)?

Cat文件| grep模式| xargs sed s/\n/ /g 对我没用。


当前回答

在red hat linux上,我只使用echo:

Echo $(cat /some/file/name)

这将在一行中给出文件的所有记录。

其他回答

下面是使用ex编辑器(Vim的一部分)的方法:

连接所有行并打印到标准输出: $ x +%j +%p -scq!文件 (在文件中)原位连接所有行: $ ex +%j -scwq文件 注意:这将连接文件内部的所有行!

这是一个用逗号分隔输出的示例。您可以用任何分隔符替换逗号。

cat <<EOD | xargs | sed 's/ /,/g'
> 1
> 2
> 3
> 4
> 5
> EOD

生产:

1,2,3,4,5

粘贴-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,  

循环地,对于每个' - '的实例。

我所知道的解决这个问题最快最简单的方法是:

当我们想用空格替换新的行字符\n时:

xargs < file

Xargs对每行字符数和所有字符的总和有自己的限制,但我们可以增加这些限制。详细信息可以通过运行命令:xargs——show-limits和手册:man xargs找到

当我们想用一个字符替换另一个字符时:

tr '\n' ' ' < file

当我们想用多个字符替换一个字符时:

tr '\n' '~' < file | sed s/~/many_characters/g

首先,我们将换行符\n替换为波浪号~(或选择文本中没有出现的另一个唯一字符),然后我们将波浪号替换为任何其他字符(many_characters),并对每个波浪号执行此操作(标记g)。

使用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"