操作系统:Linux Mint,Bash:GNU bash,版本4.3.11
我有一个这样的字符串:
(abc):seq1,seq2,whatever:(123seq3)
我想根据以下表格替换seq1
... seq3
:
seq1 name1
seq2 name2
seq3 name3
该表位于文本文件中,表中的分隔符实际上是制表符,而不是示例中的空格。要替换的子串(seq1
等)只能通过其名称来识别。字符串中没有分隔符。
答案 0 :(得分:2)
我建议在这里使用awk。假设您的字符串存储在变量$string
中并且替换文件位于文件table
中,您可以执行以下操作。
awk -v input="$string" '{ gsub($1, $2, input) } END { print input }' table
这将使用第二个字段的内容替换每行第一个字段中出现的任何字符串。它假定文件中的字符串不包含任何可被解释为正则表达式元字符的字符,例如*
,&
等
答案 1 :(得分:1)
假设您的替换表存储在文件table
中,您可以使用
#!/bin/bash
string="$1"
while read from to; do
string="${string//$from/$to}"
done < "$2"
echo "$string"
如果它存储在文件script
中,您可以按如下方式使用它:
./script '(abc):seq1,seq2,whatever:(123seq3)' table
它会返回
(abc):name1,name2,whatever:(123name3)
脚本遍历table
文件,对于每个条目,使用参数扩展替换相应的字符串。