Unix 使用grep追加到同一行

Unix 使用grep追加到同一行,unix,grep,Unix,Grep,我有一个多行的文件。我试图找到与特定模式匹配的行,然后将它们附加到输出文件中,所有这些行都位于同一个位置 例: 输入文件: ABCD other text EFGH other text IJKLM 我正在尝试将输出设置为: ABCD EFGH IJKLM 您可以使用tr将换行符转换为空格: grep $EXPRESSION $INPUT_FILE | tr '\n' ' ' >> $OUTPUT_FILE 如果您喜欢perl,还可以 perl -nl40e 'print i

我有一个多行的文件。我试图找到与特定模式匹配的行,然后将它们附加到输出文件中,所有这些行都位于同一个位置

例: 输入文件:

ABCD 
other text
EFGH
other text
IJKLM
我正在尝试将输出设置为:

ABCD EFGH IJKLM

您可以使用
tr
将换行符转换为空格:

grep $EXPRESSION $INPUT_FILE | tr '\n' ' ' >> $OUTPUT_FILE

如果您喜欢perl,还可以

perl -nl40e 'print if /PATTERN/' files....

为您的输入生成

ABCD-EFGH-IJKLM


要使
grep
输出匹配以空格而不是换行符分隔,一种简单的方法是使用
$(…)
将其包装在子shell中,如下所示:

echo $(grep -o '^[A-Z]*$' input.txt) >> output.txt
或者您可以使用
tr

grep -o '^[A-Z]*$' input.txt | tr '\n' ' ' >> output.txt
perl

grep -o '^[A-Z]*$' input.txt | perl -pe 'chomp; s/$/ /'

下面是一个简短的
awk

awk 'NR%2==1' ORS=" " file
ABCD EFGH IJKLM

它将每隔一行打印一行。

谢谢!这看起来是我得到想要的东西的最简单的方法。
awk 'NR%2==1' ORS=" " file
ABCD EFGH IJKLM