如何删除 X 个字符之后的所有单词

2024-03-12

我读了这篇文章:sed 删除行中除前 5 个字符之外的剩余字符 https://stackoverflow.com/questions/10718326/sed-delete-remaining-characters-in-line-except-first-5这帮助我删除 x 之后的所有字符。但是,我很难找到如何删除 x 个字符之后的所有单词。

我从这段代码开始:

echo "StackOverflow Users Are Brilliant And Hard Working" | sed 's/.//30g'
#character 30 ---------------------^

我的尝试:

echo "StackOverflow Users Are Brilliant And Hard Working" | sed 's/ .* //30g'
#character 30 ---------------------^

在这些输出中,我要么截掉最后一个单词,要么计算单词数。相反,我需要删除 30 个字符后的单词。我在不同的行/字长上运行它,所以这就是为什么我不能将它设置为单词的末尾。

期望的输出:

StackOverflow Users Are Brilliant

如果您知道如何计算 x 个字符后的单词,我们将不胜感激您的帮助。

请注意:如前所述,请勿将代码更改为 33 或 34 个字符。问题的要点是删除30个字符之后的所有单词。


This awk会做

$ awk 'BEGIN{FS=OFS="" }  length>30{i=30; while($i~/\w/) i++; NF=i-1; }1' file
StackOverflow Users Are Brilliant
This line has 22 chars

Setting FS=OFS=""这样每个字符都被视为一个字段

If length>30 then i=30; while($i~/\w/) i++;即不断增加i直到我们到达非数字字符;一旦循环结束,设置所需的NF.

该行与length<=30将按原样打印。

Using grep

$ grep -oE "^.{1,29}\w*" file
StackOverflow Users Are Brilliant
This line has 22 chars

^.{1,29}\w* : 1 to 29因为如果30thchar 是非alnum,那么不应考虑它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何删除 X 个字符之后的所有单词 的相关文章

随机推荐