我有一个密码文件,应该以{{1}}开头的类似条目的内容进行处理。
样本条目:
ENTP
到
ENTP\username:VAS:1749078453:1749078453::/home/username:/bin/bash
即,我们必须在所有情况下都将ENTP\username:username_tst:1749078453:1749078453::/home/username:/bin/bash
搜索并替换为VAS
。
我知道我们可以使用sed进行搜索和替换,但是对于如何用第一个字段中的“用户名”替换它,我感到困惑。有没有办法可以在sed中做到这一点?
答案 0 :(得分:1)
我认为将sed与-r选项一起使用最简单
-r, --regexp-extended
use extended regular expressions in the script
避免使用许多反斜杠表达式:
sed -r 's/(\\)(username)(:VAS:)/\1\2:\2_tst:/'
测试:
$> echo "ENTP\username:VAS:1749078453:1749078453::/home/username:/bin/bash" | sed -r 's/(\\)(username)(:VAS:)/\1\2:\2_tst:/'
ENTP\username:username_tst:1749078453:1749078453::/home/username:/bin/bash
现在,您可以使用文件了:
cat password_file | sed -r 's/(\\)(username)(:VAS:)/\1\2:\2_tst:/'
或:
sed -r 's/(\\)(username)(:VAS:)/\1\2:\2_tst:/' < password_file
如果看起来不错,您可以这样做:
sed -r 's/(\\)(username)(:VAS:)/\1\2:\2_tst:/' < password_file > out_file