Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unix 如何使用awk或sed在文件中每个单词的末尾追加字符?_Unix_Awk_Sed - Fatal编程技术网

Unix 如何使用awk或sed在文件中每个单词的末尾追加字符?

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_

您好,我在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_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
GNU
awk
手册:

gensub提供了[…]在替换文本中指定regexp组件的功能。这是通过在regexp中使用括号来标记组件,然后在替换文本中指定“\n”,其中n是一个从1到9的数字

  • 如果在首字母
    -v
    中声明“\N”,然后用
    \\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