我读了这篇文章: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
因为如果30th
char 是非alnum,那么不应考虑它。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)