我有一个包含以下内容的文件:
lines
lines
rootdev=UUID=967d8dc3-f595-4a6e-929e-cc89as5a1a2s / ext4 defaults,
lines
我正在搜索一行命令,它应该在 rootdev
行中的空格后删除所有内容,所以最终内容应该是这样的:
lines
lines
rootdev=UUID=967d8dc3-f595-4a6e-929e-cc89as5a1a2s
lines
知道如何用一行命令完成吗? (所以我不需要用这个文件打开 nano 并手动打开它)
我尝试使用 sed
但它只是替换了单词 rootdev
sed -i 's/rootdev//g' file.txt
最佳答案
您对 sed
的尝试无效,因为它只会删除带有空字符串的 rootdev
字符串。您需要的是一个匹配模式并在整行上执行操作的工具,我认为 awk
比 sed
更值得推荐。
使用 awk
来匹配使用 gsub()
去除空格的行应该就足够了,
awk '/^rootdev/{ gsub(/[[:space:]].*/,"",$0) }1' file
如果您使用的 GNU awk
版本高于 4.1.0,您可以使用其就地编辑选项动态地进行更改
gawk -i inplace '/^rootdev/{ gsub(/[[:space:]].*/,"",$0) }1' file
对于早期版本,使用临时文件
awk '/^rootdev/{ gsub(/[[:space:]].*/,"",$0) }1' file > temp && mv temp file
或使用 moreutils
中的 sponge
。如果它在您的系统中不可用,请在 RHEL 上使用 yum install moreutils
或在 Debian 中使用 apt-get
获取它。
awk '/^rootdev/{ gsub(/[[:space:]].*/,"",$0) }1' file | sponge file
关于linux - 从空格后开始的行中删除所有内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53411584/