gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 11:28:40 25 4
gpt4 key购买 nike

我读了这篇文章: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个字符后的所有WORDS。

最佳答案

这个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

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

如果length>30然后 i=30; while($i~/\w/) i++;即不断增加 i直到我们到达一个非校友字符;一旦循环结束设置所需的 NF .

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

使用grep

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

^.{1,29}\w* : 129因为如果 30th char 是非 alnum 则不应考虑。

关于linux - 如何删除X个字符后的所有单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46746639/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com