我如何将文本线截断比给定的长度更长?

问题描述 投票:0回答:6
您如何在字符数量之后删除所有内容?例如,在15个字符后切下所有内容,然后添加

...

This is an example sentence
应该变成

This is an exam...

    
gnutools

head
string bash shell string-length truncation
6个回答
40
投票

head -c 15 <<<'This is an example sentence'

尽管考虑

head -c
仅处理字节,因此这与诸如UTF-8 umlaut之类的多字角色不相容。
式内置字符串索引工作:

ü
输出:

str='This is an example sentence' echo "${str:0:15}"

最终与KSH,Dash,Zsh一起使用的东西……:
This is an exam

以编程方式:
printf '%.15s\n' 'This is an example sentence'

如果您使用的是bash,则可以直接将
n=15
printf '%.*s\n' $n 'This is an example sentence'
输出分配给变量,并保存一个子壳呼叫:

printf
    

使用
trim_length=15 full_string='This is an example sentence' printf -v trimmed_string '%.*s' $trim_length "$full_string"

cut

17
投票
其中包括字符(处理多字节字符)1-15,C.F。

echo "This is an example sentence" | cut -c1-15 This is an exam


cut(1)
    

使用
-b, --bytes=LIST select only these bytes -c, --characters=LIST select only these characters

sed

13
投票
输出:

echo 'some long string value' | sed 's/\(.\{15\}\).*/\1.../'

该解决方案的优点是,短字符串不会添加tail:

some long strin...

输出:

...

因此,这是所有大小输出的解决方案。
    

wawk也可以完成此操作:
echo 'short string' | sed 's/\(.\{15\}\).*/\1.../'

中awk,
short string
是当前的线。

$ echo 'some long string value' | awk '{print substr($0, 1, 15) "..."}' some long strin...


4
投票
提取字符1至15。 尾随

substr($0, 1, 15)

附加了三个点。

todd
实际上有一个很好的答案,但是我选择将其更改一些以使功能更好并删除不必要的部分:p
$0
在此版本中,较长字符串上的附加文本由第三个参数选择,最大长度由第二个参数选择,文本本身由第一个参数选择。
不需要变量:)
    


3
投票

如果您不关心外壳可移植性,则可以在Bash中使用许多不同的shell扩展在bash中进行此操作。这样可以避免向外部命令弹出。例如:

"..."
您还可以通过这种方式循环整个文件。给定一个包含上面相同句子的文件(每行),您可以使用

readin内置的默认

reply

变量

如下:

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.