我有一个包含以下内容的文件:
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
答案 0 :(得分:2)
您尝试使用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
或使用sponge
中的moreutils
。如果它在您的系统中不可用,请使用yum install moreutils
或Debian中的apt-get
在RHEL上获得它。
awk '/^rootdev/{ gsub(/[[:space:]].*/,"",$0) }1' file | sponge file
答案 1 :(得分:1)
首先,搜索以rootdev=
开头的行,当找到该行时,删除第一个空格之后直到行尾的所有内容。
sed -i '/^rootdev=/ s/ .*$//' file
使用捕获组保留rootdev=...
并将其替换为整个行也是一种选择。
sed -i 's/^\(rootdev=[^ ]*\).*$/\1/' file