[英]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
使用bash
和printf
:
printf '%.383s\n' $(<text.file)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.