Shell脚本:如何添加包含特殊字符串的行的末尾

时间:2017-11-09 16:20:53

标签: bash shell unix sed grep

我的VAR包含:

list_data="toto
titi
tata
tete"

我的数组可以包含这个示例或更多值,然后是3个数据:

arraytest[0]="Hello|Test|env|tata|POLO|GER|GO|"
arraytest[1]="GOODNIGHT|Test2|env2|tete|GOLF|ITA|NOTGO|"
arraytest[2]="AFTER|Test3|env3|JAJA|CIT|FRA|GO|"

我的字符串是

string="INSERT"

我想要做的是在每行的末尾添加特殊字符串,其中每行包含list_data的每个值

例如:

arraytest[0]="Hello|Test|env|tata|POLO|GER|GO|INSERT"
arraytest[1]="GOODNIGHT|Test2|env2|tete|GOLF|ITA|NOTGO|INSERT"
arraytest[2]="AFTER|Test3|env3|JAJA|CIT|FRA|GO|"

我试试这个

echo ${arraytest[*]} | sed -i 's/$/ $string'

请帮助。 谢谢。

2 个答案:

答案 0 :(得分:1)

bash 解决方案:

string="INSERT"
pat="(${list_data//$'\n'/|})"
for i in "${!arraytest[@]}"; do 
    [[ "${arraytest[$i]}" =~ $pat ]] && arraytest[$i]+=$string
done

最终arraytest内容:

echo ${arraytest[*]}
Hello|Test|env|tata|POLO|GER|GO|INSERT GOODNIGHT|Test2|env2|tete|GOLF|ITA|NOTGO|INSERT AFTER|Test3|env3|JAJA|CIT|FRA|GO|

详细说明:

  • pat="(${list_data//$'\n'/|})" - 构建正则表达式模式(pat包含(toto|titi|tata|tete)

  • ${!arraytest[@]} - 基本签名格式为${!name[*]} - 如果 name 是一个数组变量,则扩展为<中指定的数组索引(键)列表EM>名称

答案 1 :(得分:0)

循环遍历数组的各个元素(而不是$ {array [*]})

ggplot(df, aes(class, proportion, fill = as.factor(rating))) +
  geom_col()