【问题标题】:add a command in the beginning of quotation mark by using bash使用 bash 在引号开头添加命令
【发布时间】:2018-09-04 08:29:00
【问题描述】:

我想用 sed 做以下步骤:

before: test="testabc"

after: test="quiz testabc"

如何在引号开头添加 quiz 后跟空格?

感谢您的帮助。

【问题讨论】:

  • 你尝试了什么?
  • sed 's/="/&quiz /g' 应该这样做
  • 即使学习s/search/replace/ 的简单sed 语法也会给你sed 's/"/"quiz /' ......诚实的问题,搜索sed 示例真的那么难吗?你可以随时在这里查看信息页面stackoverflow.com/tags/sed/info

标签: regex linux bash perl sed


【解决方案1】:

您可以使用以下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/="/&amp;quiz /g' 或者如果您不关心变量名并且想要更改每个分配。

【讨论】:

    猜你喜欢
    • 2019-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-20
    • 1970-01-01
    • 1970-01-01
    • 2012-05-16
    • 2023-03-19
    相关资源
    最近更新 更多