我有一个包含以下文本的文件input.txt
Total users:
abc
xyz
pqrs
用户数量可能会发生变化,但始终只有一位用户。我想用sed
用外卡'*'替换用户名Total users:
*
有没有办法可以找到'Total users:'字符串并用*替换之后的所有内容。有点像
sed s/Total users: \n[Till EOF]/Toal users: \n*/g
答案 0 :(得分:1)
一种方式:
$ sed '3,$s/\S*$/*/' file
Total users:
*
*
*
这将从文件中的第三行替换s/\S*$/*/
,直到最后一行3,$
,其中替换替换任何空白字符,直到具有单个*
的行尾。根据您的实际文件修改了替换命令,因为如果您在用户名中允许空格,则会失败。更强大的替代品可能是:
$ sed -r '3,$s/(\s+).*/\1*/' file
Total users:
*
*
*
这将在具有单个*
的初始空格后替换。如果要将更改存储回文件,请使用-i
选项:
$ sed -ri '3,$s/(\s+).*/\1*/' file
修改强>
使用单个*
替换所有用户:
$ sed -r '3{s/(\s+).*/\1*/;q}' file
Total users:
*
尽管创建此文件比提出问题要快得多。
答案 1 :(得分:1)
这可能就是你需要的
sed -e "/Total users:/b; s|^\([[:blank:]]*\)[^[:blank:]]\+\(.*\)|\1*\2|" input.txt
答案 2 :(得分:1)
这样做:
sed -e '/^Total users:/ s/.*/&\n\n */; q' input.txt
当找到以Total users:
开头的行时,它会替换为自身,附加两个换行符和星号,并退出而不处理任何其他行。
如果您使用sed
的更有限版本,而您无法使用;
分隔多个命令,则可以这样编写以解决此问题:
sed -e '/^Total users:/ s/.*/&\n\n */' -e '/^Total users:/ q' input.txt
哪个更详细,但更便携。