部分字符串拆分为 Bash
Partial String split in Bash
让我们考虑这个字符串:
00x[=41=]x[=41=]x[=41=]x[=41=]x[=41=]x[=41=]x[=41=]x[=41=]x\g09x\t20x[=41=]x[=41=]x[=41=]x\
我要检索的是这个:
00x[=42=]x[=42=]x[=42=]x[=42=]x[=42=]x[=42=]x[=42=]x[=42=]x\g09x\t20x\
基本上,逻辑是:
只要是00x\就继续读剩下的字符串。
只要它不是 00x\ 就继续读取字符串的剩余部分。
在那里分裂
如何在 bash 中实现?注意中间有一个“9”,还有一个"t"。所以 2 00x\ 标记之间可能有 "garbage"。所以我不能只将字符串拆分成标记,我不能使用 cut (不是固定长度)。我可以用 awk 或 sed 做些什么?
谢谢。
编辑:输入的字符串可以在00x\之后跟其他字符串。像这样:00x[=41=]x[=41=]x[=41=]x[=41=]x[=41=]x[=41=]x[=41=]x[=41=]x\g09x\t20x[=41=]x[=41=]x[=41=]x\00x\00x\00x\00x\00x\00x\GL7Dx\00x\00x\00x\00x\00x\00x\00x\00x\00x\00x\BCx\V6Ax\00x\00x \00x\00x\00x\00x\00x\00x\00x\00x\H50x\ 我要的还是00x[=42=]x[=42=]x[=42=]x[=42=]x[=42=]x[=42=]x[=42=]x[=42=]x\g09x\t20x\
awk 中的内容:
$ awk '
BEGIN {
FS=ORS="\"
}
{
for(i=1;i<=NF;i++)
if(($i=="00x")&&p!="00x"&&p!="") {
printf "\n"
exit
} else {
p=$i
print $i
}
}' file
更新数据的输出
00x[=11=]x[=11=]x[=11=]x[=11=]x[=11=]x[=11=]x[=11=]x[=11=]x\g09x\t20x\
在 perl 中使用负后视:
$ perl -ne 's/(?<!00x)\00x.*/\/g;print' file
00x[=12=]x[=12=]x[=12=]x[=12=]x[=12=]x[=12=]x[=12=]x[=12=]x\g09x\t20x\
让我们考虑这个字符串:
00x[=41=]x[=41=]x[=41=]x[=41=]x[=41=]x[=41=]x[=41=]x[=41=]x\g09x\t20x[=41=]x[=41=]x[=41=]x\
我要检索的是这个:
00x[=42=]x[=42=]x[=42=]x[=42=]x[=42=]x[=42=]x[=42=]x[=42=]x\g09x\t20x\
基本上,逻辑是:
只要是00x\就继续读剩下的字符串。
只要它不是 00x\ 就继续读取字符串的剩余部分。 在那里分裂
如何在 bash 中实现?注意中间有一个“9”,还有一个"t"。所以 2 00x\ 标记之间可能有 "garbage"。所以我不能只将字符串拆分成标记,我不能使用 cut (不是固定长度)。我可以用 awk 或 sed 做些什么?
谢谢。
编辑:输入的字符串可以在00x\之后跟其他字符串。像这样:00x[=41=]x[=41=]x[=41=]x[=41=]x[=41=]x[=41=]x[=41=]x[=41=]x\g09x\t20x[=41=]x[=41=]x[=41=]x\00x\00x\00x\00x\00x\00x\GL7Dx\00x\00x\00x\00x\00x\00x\00x\00x\00x\00x\BCx\V6Ax\00x\00x \00x\00x\00x\00x\00x\00x\00x\00x\H50x\ 我要的还是00x[=42=]x[=42=]x[=42=]x[=42=]x[=42=]x[=42=]x[=42=]x[=42=]x\g09x\t20x\
awk 中的内容:
$ awk '
BEGIN {
FS=ORS="\"
}
{
for(i=1;i<=NF;i++)
if(($i=="00x")&&p!="00x"&&p!="") {
printf "\n"
exit
} else {
p=$i
print $i
}
}' file
更新数据的输出
00x[=11=]x[=11=]x[=11=]x[=11=]x[=11=]x[=11=]x[=11=]x[=11=]x\g09x\t20x\
在 perl 中使用负后视:
$ perl -ne 's/(?<!00x)\00x.*/\/g;print' file
00x[=12=]x[=12=]x[=12=]x[=12=]x[=12=]x[=12=]x[=12=]x[=12=]x\g09x\t20x\