例如我有这个输出:
string1 anynameveryveryverylong string2
string1 othernameveryveryverylong string2
我想将名称截断为前十个字符:
string1 anynamever string2
string1 othernamev string2
伪正则表达式可以是:
perl -pe "s/([^\t]+\t)([^\t]+)\t/\1\2{10}\t/g"
我怎么得到这个?
例如我有这个输出:
string1 anynameveryveryverylong string2
string1 othernameveryveryverylong string2
我想将名称截断为前十个字符:
string1 anynamever string2
string1 othernamev string2
伪正则表达式可以是:
perl -pe "s/([^\t]+\t)([^\t]+)\t/\1\2{10}\t/g"
我怎么得到这个?
^
在字符串的开头匹配\S
表示非空白+
表示至少重复一次\s
表示空格{10}
表示重复10次即保留第一个单词和下一个单词的前 10 个字符,而忘记第二个单词的剩余字符。
您的伪正则表达式有一个重大问题:
{10}
被放置在替换部分,但替换只是一个字符串。正则表达式仅发生在模式部分。更多选择:
Perl 在选项卡上自动拆分:
awk
sed
还有一个 Perl