我在文件中得到了这段文字.txt:
Osmun.Prez@mail.com:c7lB2m6b@3.a.a:tt_webid_v2=6990226111024612869; tt_webid=6990226111024612869; tt_csrf_token=VD5Nb_TQFH4RKhoJeSe2nzLB; R6kq3TV7=AHkh4PB6AQAA3LIS90nWf2ss0Q7ZTCQjUat4axctvhQY68DdUEz92RwpmVSX|1|0|e9d6917c2fe555827dcf5ee916ba9778079ab2a9; ttwid=1%7CAFodeNF0iZM2fyy-ZeiZ6HTpZoG_MSx6SmXHgGVQ-V4%7C1627538859%7C59ca1e4a56f9f537b55e655a6dabff88e44eb48502b164ed6b4199f5a5263cb0; passport_csrf_token_default=6f7653c3ce946a6ce5444723fb0c509b; passport_csrf_token=6f7653c3ce946a6ce5444723fb0c509b; sid_guard=0483b7d37f4e4bd20ab3046e29724798%7C1627538893%7C5184000%7CMon%2C+27-Sep-2021+06%3A08%3A13+GMT; uid_tt=27b52febe6222486b9f6b6a90ef4ffeace5ea25c09d29a1583be5a1ecf760996; uid_tt_ss=27b52febe6222486b9f6b6a90ef4ffeace5ea25c09d29a1583be5a1ecf760996; sid_tt=0483b7d37f4e4bd20ab3046e29724798; sessionid=0483b7d37f4e4bd20ab3046e29724798; sessionid_ss=0483b7d37f4e4bd20ab3046e29724798; store-idc=maliva; store-country-code=us; odin_tt=294845c8f7711db177f7c549a9f44edb1555031b27a2a485df809cd92c4e544ac0772bf462df5b7a100f6e488c45303cd62df3b6b950f0842520cd887850137b035d990f29cc8b752765e594560c977f; cmpl_token=AgQQAPNSF-RMpbE89z5HYF0_-2PcrxjXf4fZYP5_ZA
如何删除内部string
(第一个和唯一的实例)中的所有内容,从文件中的:tt_
到_ZA
.txt仅保留使用bash linux
的Osmun.Prez@mail.com:c7lB2m6b@3.a.a
? 谢谢
像这样:
sed -i "s/:tt_.*//" file.txt
如果要就地编辑文件。如果没有,请卸下-i
开关。sed命令的意思是:替换 (s
),在每行file.txt
中,所有以模式:tt_
开头的字符 (.*
) 用一个空字符串 (//
)。
或命令:
sed -i "s/:tt_.*_ZA//" file.txt
它更符合您的要求,但返回相同的输出。
使用模式替换:
i=$(cat file.txt)
echo "${i/:tt*_ZA}"
假设一般要求是在第 2 个:
之后删除所有内容......
示例数据:
$ cat file.txt
Osmun.Prez@mail.com:c7lB2m6b@3.a.a:tt_webid_v ... to end of line
some.one@home.com:B52_m6b@9_az.more.stuff:delete from here ... to end of line
一个sed
想法:
$ sed -En 's/^([^:]*:[^:]*).*$/1/p' file.txt
Osmun.Prez@mail.com:c7lB2m6b@3.a.a
some.one@home.com:B52_m6b@9_az.more.stuff
使用awk
awk 'BEGIN{FS=OFS=":"}{print $1,$2}'
使用:
作为分隔符,很容易在:tt
之前提取列
这会删除文件中从":tt_"到最后一个"_ZA"(包括")的所有字符.txt
Mac_3.2.57$cat file.txt | sed 's/()[:]tt.*_ZA(.*)/12/'
Osmun.Prez@mail.com:c7lB2m6b@3.a.a
Mac_3.2.57$
或者如果它总是用冒号分隔的前 2 个值(根据您的示例)
猫文件.txt | 剪切 -F1,2 -D':'