linux - 从空格后开始的行中删除所有内容

标签 linux sed sh

我有一个包含以下内容的文件:

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 字符串。您需要的是一个匹配模式并在整行上执行操作的工具,我认为 awksed 更值得推荐。

使用 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/

相关文章:

node.js - Firebase 服务失败但部署工作正常

linux - Nginx 配置不起作用

sed 用捕获组替换行

linux - 在 Linux 中,我想添加计数文件并将计数回显到日志

linux - sudo : unable to excute ./blah.sh: 没有那个文件或目录

node.js - 我从源代码安装了 Node-12 但无法获取 nodejs --version

linux - 如何编写 stap (systemtap) 脚本来查看某个进程是否调用了特定的内核函数?

bash - 用一行将项目添加到逗号分隔列表

awk - 使用sed删除除结束模式以外的行范围

linux - bash 脚本中的 set -e 是什么意思?