使用bash在引号的开头添加命令

时间:2018-03-26 08:44:49

标签: regex linux bash perl sed

我想使用sed执行以下步骤:

before: test="testabc"

after: test="quiz testabc"

如何在引号的开头添加测验后跟空格?

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

您可以使用以下sed命令

$ echo 'test="testabc"' | sed 's/="\([^"]*\)"/="quiz \1"/'                                                                                     
test="quiz testabc"

说明:

  • s/pattern/replacement/在搜索/替换模式下使用sed。
  • ="\([^"]*\)"此正则表达式将获取="some string"
  • 然后您可以使用捕获组( )并返回参考\1以保留字符串内容并添加测验
  • 如果您需要搜索并替换此模式的多个匹配项,则
  • s/pattern/replacement/g使用全局替换模式

或以下perl解决方案也适用:

$ echo 'test="testabc"' | perl -pe 's/(?<==")([^"]*)(?=")/quiz \1/'
test="quiz testabc"

有关正则表达式的详细信息:http://www.rexegg.com/regex-quickstart.html

改进:

  • sed 's/test="\([^"]*\)"/test="quiz \1"/'添加变量名称以确保仅更改该变量。
  • sed 's/="/&quiz /g'或者如果您不关心变量名称并希望更改每个分配。