【问题标题】:how to add forward slash to a word如何在单词中添加正斜杠
【发布时间】:2014-07-18 08:44:24
【问题描述】:

有没有办法在单词中添加正斜杠? 像这样

测试-> /test/

我有这个文件,

switch1  Ethernet13  1     4     5  
switch1  Ethernet14  1     4     5  
switch1  Ethernet15  1     4     5  
switch1  Ethernet8   1     4     5  
switch1  Ethernet16  1     4     5  
switch1  Ethernet1   2002  2697  2523  
switch1  Ethernet17  2002  2576  2515  

想改成这样,

/switch1/  /Ethernet13/  /1/     /4/     /5/  
/switch1/  /Ethernet14/  /1/     /4/     /5/  
/switch1/  /Ethernet15/  /1/     /4/     /5/  
/switch1/  /Ethernet8/   /1/     /4/     /5/  
/switch1/  /Ethernet16/  /1/     /4/     /5/  
/switch1/  /Ethernet1/   /2002/  /2697/  /2523/    
/switch1/  /Ethernet17/  /2002/  /2576/  /2515/  

我正在寻找这种格式的原因是我可以使用 它用 awk 找到匹配的模式。 我试过了,但它只打印了 0(零),

awk '{print "\/$1\/}'    

感谢您的任何想法或建议。

【问题讨论】:

  • 注意不平衡的双引号是个问题。

标签: regex awk scripting


【解决方案1】:

使用蛮力和无知,您可以使用:

awk '{ for (i = 1; i <= NF; i++) $i = "/"$i"/"; print }'

这会将每个字段替换为由斜线包围的值。唯一需要注意的是它会弄乱字段之间的间距,但是如果您要使用输出进行搜索,那将不是问题。

如果您希望每个字段位于单独的行上(这可能对提议的目的更有用),那么:

awk '{ for (i = 1; i <= NF; i++) print "/"$i"/"; }'

【讨论】:

  • 为了保留你可以做的空间awk '{gsub(/[^ ]+/,"\/&amp;\/")}1' file
  • 感谢所有答案。我是新来的。即使帮助页面上说我不应该说谢谢,但感觉也不奇怪。
【解决方案2】:

如果你的 awk 有 gensub() 函数...

awk '{ print gensub(/(\w+)/, "/\\1/", "g") }' file.txt

关于gensub

【讨论】:

  • 当我在尝试帮助其他人解决问题时发现了 gensub,这是一个不错的发现……然后当我发现他们没有 @987654331 时,我大失所望@...感谢链接和提及gensub 可能不存在。
【解决方案3】:

您可以使用以下内容。

sed -r 's!(\S+)!/\1/!g' file.txt

【讨论】:

    【解决方案4】:

    我会使用以下sed 命令:

    sed 's~\([^ \t]\+\)~/\1/~g' file.txt
    

    它用斜杠包围所有非空格字符组([^ \t]\+)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-14
      • 1970-01-01
      • 1970-01-01
      • 2017-05-12
      • 2020-08-17
      相关资源
      最近更新 更多