【问题标题】:bash awk replace gsubbash awk 替换 gsub
【发布时间】:2019-04-21 06:06:35
【问题描述】:

我试图找出我做错了什么。

test="This is a test"
mytest=$(awk -v test="${test}" 'BEGIN{gsub("This is","This is not",test)}')
printf "My Test = $mytest\n"

这是更大的事情的一部分,但我试图理解为什么我不能让它工作。 $mytest 是空的。最终我想正则表达式/这是一个测试/但我什至无法让这个简单的工作。它没有出错。

【问题讨论】:

  • mytest="${test/This is/This is not}"

标签: regex bash awk replace gsub


【解决方案1】:

你应该输出结果,否则,你没有什么可以给变量mytest。要解决此问题,请在 gsub(....) 之后添加 print test

原来是这样:

mytest=$(awk ... BEGIN{gsub(...);print test}')

【讨论】:

  • 除了awk,当没有被告知对文件进行操作时,对STDIN进行操作,在这种情况下是执行命令的tty。至少需要发送一行以“工作” - $ echo | awk -v test="this is a test" 'BEGIN { gsub("this is", "this is not", test); } { print test }'
  • 别管我之前的评论——如果你把你的代码放在BEGIN 块中,不管命令是否有输入,它都会执行。无论哪种方式,OP 没有输出问题的关键:他的 awk 脚本没有发出任何输出的指令。
  • @dossy 您可以在BEGIN 块中进行输出,而无需读取输入文件或标准输入。请做一些测试。
  • 谢谢。我只需要“;打印测试”就可以了。
猜你喜欢
  • 2021-01-29
  • 1970-01-01
  • 1970-01-01
  • 2020-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-20
  • 1970-01-01
相关资源
最近更新 更多