我想使用 sed 从字符串流中的第一个单词中删除最后一个字符,例如,20240801T00:48
应该变成20240801T00:4
。我试过了
sed 's/\(.\)\([^ ]*\) /\2
但它什么都没改变。如果我引用组 1,它会用最后一个字符替换整个单词(正如您所期望的那样)。不确定我做错了什么,或者是否有更好的方法......
我想使用 sed 从字符串流中的第一个单词中删除最后一个字符,例如,20240801T00:48
应该变成20240801T00:4
。我试过了
sed 's/\(.\)\([^ ]*\) /\2
但它什么都没改变。如果我引用组 1,它会用最后一个字符替换整个单词(正如您所期望的那样)。不确定我做错了什么,或者是否有更好的方法......
根据显示的输入,您实际上不需要任何捕获组。
只需使用:
这里:
.
将匹配任何字符后跟一个空格,这将仅匹配第一个空格实例如果可以使用 Perl,则可以使用以下 Perl 单行命令:
Perl 单行命令使用这些命令行标志:
-e
:告诉 Perl 在行内查找代码,而不是在文件中查找。-p
:一次循环输入一行,$_
默认将其分配给。print $_
每次循环迭代后添加。s{PATTERN}{REPLACEMENT}
:用 REPLACEMENT 替换正则表达式 PATTERN。^
:匹配行的开头。(\S+)\S
:匹配最大数量的非空白字符,使用括号捕获到捕获组 1(稍后用 引用$1
)中,后跟一个(最后一个)非空白字符(未被捕获,因此不包含在 中$1
)。参见:
perldoc perlrun
:如何执行 Perl 解释器:命令行开关perldoc perlrequick
:Perl 正则表达式快速入门这可能对你有用(GNU sed):
如果一个单词必须包含至少 2 个非空格字符,则上述解决方案将删除最后一个字符。
但是,如果一个单词可能包含至少 1 个非空白字符,则使用: