在bash脚本中使用变量作为参数进行sed

时间:2015-06-03 04:22:55

标签: linux bash sed

我正在尝试编写一个bash脚本来扫描authorized_keys文件,并删除几个以前员工的密钥(如果找到)。我有一点时间搞清楚最后逃脱sed命令。我使用逗号代替/ since /可以在ssh-key中显示。任何帮助将不胜感激

{{1}}

2 个答案:

答案 0 :(得分:2)

我认为你让它变得有点复杂。

您可以使用grep -vf流程替换

执行此操作
# array to hold the value you want to remove
keys=(
'AAAAB3NzaC1yc2EAAAABJQAAAIEAxoZ7ZdpJkL98n8cSTkFBwaAeSNK0m/tOWtF1mu5NAzMM/+1SDO6rJH/ruyyqBJo9s+AHWZLGRHfXT2XBg2SRaUnubAKp0w6qNIbej0MsA/ifAs8AfVGdj0pUPLtKpo6XVZkB8vEZSIQ+xNk1n5HJrGJnFGWKWeY3z1/KOLxcLHU=',
'AAAAB3NzaC1yc2EAAAABIwAAAQEAwHYNAVhb319OBVXPhYF8cSTkFBwaAekr7UcKjfLPCHMpz19W0L/C0g+75Hn8COxOQILDUhIPhYHXOduQjGD/6NXgJDWxgyT00Azg5BREUnBd58WqZPlEvTZYlAgmdMIbnWPPGdJwzqKH/k7/STK6vTKxL6rxBo4lSNK0m/tOWtF1mu5NAzMM/+1SDO6rJH/ruyyqBJo9s+NIbej0MsA/ifAs8AfAkfO2JjgeQpJMyZ7B02XVN5iSLAyC3Cb5FXIjJuk4LPhcApuVyszH2lgve0r5bt/nFgVujJTvJTHPlGrqkYDcDJVUtfbjoLqGPrnpijp6rGIC7aFDDe7bk0ygHYMXDFWcjJBerfLGUWTYWFFLY3bfiO/h/9oEycmQHyB2co4a0IyyDnaYn9OY6xsRRATVlk4Q=='
)

while IFS= read -d '' -r file; do
    grep -vf <(printf "%s\n" "${keys[@]}") "$file" > "$file.tmp"
    mv "$file.tmp" "$file"
done < <(find / -name authorized_keys -print0)

答案 1 :(得分:2)

在您的情况下,它很简单,只需要使用base64代码中未包含的符号作为分隔符,例如|

sed "\|${keys[$key]}|d" $file

sed manual中的解释:

  

\%的regexp%

     

(%可以替换为任何其他单个字符。)

     

这也匹配正则表达式regexp,但允许使用与/不同的分隔符。