我想使用 sed 从字符串流中的第一个单词中删除最后一个字符,例如 20240801T00:48 应变为 20240801T00:4。我已经尝试过
sed 's/\(.\)\([^ ]*\) /\2
,但它没有改变任何东西。如果我引用第 1 组,则用最后一个字符替换整个单词(如您所料)。不确定我做错了什么,或者是否有更好的方法......
如果可以选择 Perl,您可以使用这个 Perl 单行代码:
echo "20240801T00:48 foo bar" | perl -pe 's{^(\S+)\S}{$1}'
20240801T00:4 foo bar
Perl 单行代码使用这些命令行标志:
-e
:告诉 Perl 查找内联代码,而不是在文件中。-p
:一次循环输入一行,默认将其分配给$_
。每次循环迭代后添加 print $_
。
s{PATTERN}{REPLACEMENT}
:用替换替换正则表达式模式。^
:匹配行的开头。(\S+)\S
:匹配最大数量的非空白字符,使用括号捕获到捕获组 1(稍后用 $1
引用),后跟一个(最后一个)非空白字符(未捕获,因此不会得到包含在 $1
)中。
另请参阅: