繁体   English   中英

使用bash删除字符串中特定出现后的所有文本

[英]Delete all text after a specific occurrence in a string using bash

我有一个序列:

我想用它后面的任何内容替换索引位置 383 (Q),所以期望的结果是:

MALYYDHQIEAPDAAGSPSFISWHPVHPFLAVAYISTTSTGSVDIYLEQGECVPDTHVERPFRVASLCWHPTRLVLAVGWETGEVTVFNKQDKEQHTMPLTHTADITVLRWSPSGNCLLSGDRLGVLLLWRLDQRGRVQGTPLLKHEYGKHLTHCIFRLPPPGEDLVQLAKAAVSGDEKALDMFNWKKSSSGSLLKMGSHEGLLFFVSLMDGTVHYVDEKGKTTQVVSADSTIQMLFYMEKREALVVVTENLRLSLYTVPPEGKAEEVMKVKLSGKTGRRADIALIEGSLLVMAVGEAALRFWDIERGENYILSPDEKFGFEKGENMNCVCYCKVKGLLAAGTDRGRVAMWRKVPDFLGSPGAEGKDRWALQTPTELQGNITQ

我试过了:

sed 's/"Q"//383' text.file
sed 's/Q//383' text.file

但这没有任何作用。

从长远来看,我需要处理其他一些职位,因此非常感谢灵活的方法。

祝一切顺利

这可能对你有用(GNU sed):

sed -zEi 's/(.{383}).*/\1/' file

将前 383 个字符存储为反向引用并删除其余字符。

注意-z选项将整个文件放入内存中。

你可以用 cut 做到这一点:

cut -c 1-383 < text.file

只是把它扔进池子里, head可以用来在n行之后,也可以在c字节之后:

$ head -c 383 text.file

GNU awk:

gawk '{print gensub(/(.{383}).*/,"\\1","1")}' file

如果将字符串存储在 bash 变量中,则可以使用 bash 参数扩展:

mystring=$(cat text.file)
echo "${mystring:0:383}"

另一种选择: dd

dd if=txt.file bs=383 count=1 status=none

使用bashprintf

 printf '%.383s\n' $(<text.file)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM