bash脚本:如何在两个特定字符之间插入文本

时间:2017-06-09 03:34:04

标签: bash awk sed

例如,我有一个包含以下行的文件:

"abc":"def"

我需要在123"abc":"之间插入def",以便该行变为:"abc":"123def"

因为"abc"只出现一次所以我想我可以搜索它并进行插入。

如何使用bash脚本执行此操作,例如sedawk

3 个答案:

答案 0 :(得分:1)

AMD$ sed 's/"abc":"/&123/' File
"abc":"123def"

匹配"abc":",然后将此匹配附加到123&将包含匹配的字符串"abc":"

如果您想在:之前和之后照顾空间,可以使用:

sed 's/"abc" *: *"/&123/'

要替换所有此类模式,请将gsed一起使用。

sed 's/"abc" *: *"/&123/g' File

答案 1 :(得分:0)

library(tidyverse) mget(listpop) %>% map(~.[c("SNP", "POP", "MAF")] %>% bind_rows()

sed
  • $ sed -E 's/(:")(.*)/\1123\2/' <<<'"abc":"def"' "abc":"123def" 获取(:")并放入捕获的第1组

  • :"获取剩余部分并放入捕获的第2组

  • 在替换中,(.*)\1123\2置于各组之间

123

awk

$ awk -F: 'sub(".", "&123", $2)' <<<'"abc":"def"' "abc" "123def" 函数中,正在操作第二个(sub())字段,模式用作$2(与.匹配),并在替换匹配的部分(")后跟&

答案 2 :(得分:0)

echo '"abc":"def"'| awk '{sub(/def/,"123def")}1'

"abc":"123def"