使用 sed 删除第一个单词的最后一个字符 - 捕获组问题

问题描述 投票:0回答:1

我想使用 sed 从字符串流中的第一个单词中删除最后一个字符,例如 20240801T00:48 应变为 20240801T00:4。我已经尝试过

 sed 's/\(.\)\([^ ]*\) /\2
,但它没有改变任何东西。如果我引用第 1 组,则用最后一个字符替换整个单词(如您所料)。不确定我做错了什么,或者是否有更好的方法......

sed
1个回答
0
投票

如果可以选择 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
)中。

另请参阅:

© www.soinside.com 2019 - 2024. All rights reserved.