我在 bash shell 中的命令有以下输出:
username
country
但我想将打印输出修改为:
username - country
谢谢。
答案1
我会做类似的事情:
$ seq 6 | awk '{printf "%s", sep $0; sep = " - "}; END {if (NR) print ""}'
1 - 2 - 3 - 4 - 5 - 6
或者:
$ seq 6 | paste -d ' - \n' - /dev/null /dev/null -
1 - 2
3 - 4
5 - 6
或者:
$ seq 5 | sed '$!N;s/\n/ - /'
1 - 2
3 - 4
5
如果只是两行输出,你也可以这样做:
$ seq 2 | { IFS= read -r a; IFS= read -r b; printf '%s\n' "$a - $b"; }
1 - 2
在 shell 中,像bash
whereread
和一样printf
是内置的,这样就不必执行单独的命令。在 中bash
,您可以通过设置选项来保存生成额外的进程来执行该处理lastpipe
(仅在非交互式 shell 实例中)。
答案2
tr
可以将一个字符转换为另一个字符:
echo "username
country
town" | tr '\n' ' '
输出:
username country town
用于tr -d
将字符(换行符)替换为空:
echo "username
country
town" | tr -d '\n'
输出:
usernamecountrytown
但如果你想用几个字符替换换行符,tr
这是不够的(尽管如此,我还是谈到了它,因为它是一个非常简单的命令)。
但可以通过以下方式完成sed
:
echo "username
country
town" | sed ":a; N; s/\n/ - /; ta;"
输出:
username - country - town
答案3
awk 'ORS=" - "{print $0}' filename|awk '{gsub(/- $/,"",$0);print }'
输出
username - country
答案4
通过管道将其连接到此:
sed -z 's|\n| - |'
它使用 GNUsed
将换行符替换为-
.