内联搜索和使用sed替换

时间:2019-07-03 23:47:10

标签: bash sed

我有一个密码文件,应该以{{1​​}}开头的类似条目的内容进行处理。

样本条目:

ENTP

ENTP\username:VAS:1749078453:1749078453::/home/username:/bin/bash

即,我们必须在所有情况下都将ENTP\username:username_tst:1749078453:1749078453::/home/username:/bin/bash 搜索并替换为VAS

我知道我们可以使用sed进行搜索和替换,但是对于如何用第一个字段中的“用户名”替换它,我感到困惑。有没有办法可以在sed中做到这一点?

1 个答案:

答案 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