Unix 如何使用awk或sed在文件中每个单词的末尾追加字符?
您好,我在UNIX中有一个文件,数据如下:Unix 如何使用awk或sed在文件中每个单词的末尾追加字符?,unix,awk,sed,Unix,Awk,Sed,您好,我在UNIX中有一个文件,数据如下: obj1_N,obj2_N,obj3_N\ obj3_N,obj2_N,obj4_N,obj1_N\ obj1_N\ obj3_N,obj4_N cat file.txt obj1,obj2,obj3\ obj3,obj2,obj4,obj1\ obj1\ obj3,obj4 我希望每个单词都替换为_N,并希望输出如下: obj1_N,obj2_N,obj3_N\ obj3_N,obj2_N,obj4_N,obj1_N\ obj1_N\ obj3_
obj1_N,obj2_N,obj3_N\
obj3_N,obj2_N,obj4_N,obj1_N\
obj1_N\
obj3_N,obj4_N
cat file.txt
obj1,obj2,obj3\
obj3,obj2,obj4,obj1\
obj1\
obj3,obj4
我希望每个单词都替换为_N,并希望输出如下:
obj1_N,obj2_N,obj3_N\
obj3_N,obj2_N,obj4_N,obj1_N\
obj1_N\
obj3_N,obj4_N
cat file.txt | sed's/\(\w\)\(\w\\$\)/\1\u N\2/g'
(\W |$)
表示“匹配非单词或字符串结尾sed's/,/_N/g'file.txt | sed's/$/_N/”
第一个sed命令将逗号替换为_N,第二个sed命令将行尾替换为_N为sed
sed -r 's/[A-Za-z0-9_]+/&_N/g' file
在上面的命令中,单词被定义为字母、数字和下划线的任意序列。您可以在其中添加或删除任何字符以自定义您自己的单词。使用GNU
awk
可以获得您编写的输出
awk '{print gensub(/([0-9])/, "\\1_N", "g", $0)}' file
obj1_N,obj2_N,obj3_N\
obj3_N,obj2_N,obj4_N,obj1_N\
obj1_N\
obj3_N,obj4_N
此代码:
在此使用gensub
功能进行全局搜索和替换g
- 带括号的regexp
,用于检索替换部分中带有([0-9])
的数字\\1
- 您想要的
结尾位于\N
的右侧,\\1
“\\1\N”
- 焦点在
$0
awk
手册:
gensub提供了[…]在替换文本中指定regexp组件的功能。这是通过在regexp中使用括号来标记组件,然后在替换文本中指定“\n”,其中n是一个从1到9的数字
- 如果在首字母
中声明“\N”,然后用-v
声明其名称,则结果相同\\1
欢迎来到SO,SO,SO,SO,SO,SO,SO,SO,SO,SO,SO,SO,SO,SO,SO,SO,SO,SO,SO,SO,SO,SO,SO,SO,SO,SO,SO,SO,SO,SO,SO,SO,SO,SO,SO,SO,SO,SO,SO,SO,SO是,不要在评论中回答。不,反斜杠前没有空格欢迎使用Stack Overflow!抱歉,这不是Stack Overflow的工作方式。形式为“我想做X,请给我提示和/或示例代码”的问题被认为是离题的。请访问并阅读,尤其是阅读或
sed-E的/(\w+)/\1_N/g'文件
——不要cat |……
这是对cat
(UUOc)的不必要使用。而不是读取或重定向文件。当社区中有人要求OP在评论中添加努力等内容时,这也是一种善意的请求,那么最好等待OP在他们的问题中添加这些努力,谢谢。尝试了解决方案cat file.txt | sed的/(\w)(\w\|$)/\1\u N\2/g'但它只是在最后一个单词后面追加,或者只是将它放在一个命令中:sed's/,/\N,/g;s/$/\u N/'file.txt