![如何将模式“合并”在一行中?](https://linux22.com/image/54485/%E5%A6%82%E4%BD%95%E5%B0%86%E6%A8%A1%E5%BC%8F%E2%80%9C%E5%90%88%E5%B9%B6%E2%80%9D%E5%9C%A8%E4%B8%80%E8%A1%8C%E4%B8%AD%EF%BC%9F.png)
我正在执行 grep 和 sed,并且得到了我感兴趣的文件的 2 行。如何在以新行字符结尾的单行中获取这些行?
现在我得到:
pattern1
pattern2
我想得到pattern1 pattern2 \n
答案1
{...pipeline...} | paste -d " " - -
也就是说:“从 stdin 读取一行(第一个-
),从 stdin 读取另一行(第二个-
),然后用空格将它们连接起来”
bash 特定的技术:
$ x=$(grep -o pattern. test.txt)
$ echo "$x"
pattern1
pattern2
$ mapfile -t <<< "$x"
$ echo "${MAPFILE[*]}"
pattern1 pattern2
参考:http://www.gnu.org/software/bash/manual/bashref.html#index-mapfile
答案2
我将三个版本不同的方法放在一行
AWK
printf %s\\n pattern1 pattern2 | awk -vRS="\n" -vORS=" " '1; END {print RS}'
SED
printf %s\\n pattern1 pattern2 | sed '$!N;s/\n/ /'
TR
printf %s\\n pattern1 pattern2 | tr '\n' ' '; echo
还有更多。
答案3
您可以使用 shell 脚本或在命令行中执行此操作,只需将命令的输出放入变量中即可echo
:
# x=$(grep -e "pattern1\|pattern2" test)
# printf '%s\n' "$x"
pattern1 pattern2
答案4
一种简单的方法,将输出通过管道传输到xargs
:
$ echo -e 'a\nb' | xargs
a b
这仅适用于小输出,因为它受到每个命令行最大字符数的限制。最大值取决于系统,您可以使用 获取该值getconf ARG_MAX
。