0

在 Linux 机器上,我的 IP 列表如下:

107.6.38.55
108.171.207.62
108.171.244.138
108.171.246.87

我想使用一些函数在每行末尾添加单词“或”而不破坏每一行,如下所示:

107.6.38.55 or 
108.171.207.62 or
108.171.244.138 or
108.171.246.87 or

我尝试过的每一个实现,sed或者awk给了我不正确的结果,因为它一直在尝试换行或在奇怪的地方添加输入。实现这一目标的最简单方法是什么?

到目前为止,我尝试过awk '$0=$0" or"'的建议和建议得到以下格式:sed

107.6.38.55
 or 
108.171.207.62
 or 
108.171.244.138
 or
108.171.246.87
 or
4

3 回答 3

4

不确定您一直在尝试什么,但以下内容在 Ubuntu 12.04 上对我有用

awk '{print $0" or"}'

或者正如fedorqui所建议的那样

awk '$0=$0" or"'

或者正如格伦杰克曼所建议的那样

awk '{print $0, "or"}'

[编辑]

原来 OP 的文件有 CRLF 换行符,所以dos2unix必须先运行才能解决格式问题

于 2013-06-21T14:30:33.680 回答
4

以下两个对我有用:

sed 's/.*/& or/'
sed 's/$/ or/'
于 2013-06-21T14:31:53.747 回答
0

或者使用标准文本编辑器

使用,您可以将可爱的here-stringsANSI-C 引用一起使用

ed -s filename <<< $',s/.$/& or/\nwq'

或管道printf

printf "%s\n" ',s/.$/& or/' 'wq' | ed -s filename

或者如果你echo更喜欢

{ echo ',s/.$/& or/'; echo "wq"; } | ed -s filename

或交互式(如果您喜欢问号):

$ ed filename
,s/.$/& or/
wq

评论。我正在使用替换s/.$/& or/,而s/$/ or/不仅仅是为了不追加or到空行中。

于 2013-06-21T14:50:28.783 回答