String Bash获取2个6位数字之间的字符串
我有一个UTF-8-BOM编码的文本文件,其中很多行都以6-10位数字开头(每行数字都会增加),后面有一个字符串 我想在bash脚本中进一步处理这些“行”(包括数字) 只需在String Bash获取2个6位数字之间的字符串,string,bash,sed,String,Bash,Sed,我有一个UTF-8-BOM编码的文本文件,其中很多行都以6-10位数字开头(每行数字都会增加),后面有一个字符串 我想在bash脚本中进一步处理这些“行”(包括数字) 只需在sed-n'$line\p'中使用for循环就很容易做到,但不幸的是,我需要的一些字符串中有换行符,因此我需要一种方法来提取两个6位以上数字(包括第一个数字)之间的字符串,这两个数字表示新行 3条“线”的示例: 我需要的是: 123456\tA random string here , 及 有几件事: 字符串没有被“”包
sed-n'$line\p'
中使用for循环就很容易做到,但不幸的是,我需要的一些字符串中有换行符,因此我需要一种方法来提取两个6位以上数字(包括第一个数字)之间的字符串,这两个数字表示新行
3条“线”的示例:
我需要的是:
123456\tA random string here
,
及
有几件事:
- 字符串没有被“”包围
- 字符串包含的所有数字均为=6位数字。数字始终是新字符串行的开头
- 数字会增加,因此字符串前面的数字总是小于后面的数字
- 我想将所有特殊字符(如制表符或换行符)转换为
或\t
\n
- 稍后我需要在脚本中获取字节长度,字符串必须保持其长度
如果不是的话,这是我的建议
bash-3.1$ sed -En '/^[0-9]{6,10}/!{:a;H;n;/^[0-9]{6,10}/!ba;x;s/\n/\\n/g;s/\t/\\t/g;p};/^[0-9]{6,10}/{x;s/\t/\\t/g;1!p;x;h;z;}' input.txt
示例输入的输出(末尾有一个换行):
123456\t此处为随机字符串123567\t另一个字符串\n这一次\n它将跨越\n多行
124567\t请再次使用普通字符串 我假设相关的6-10位数也总是在一行的开头,
否则它会变得更棘手 注:
对于每个换行符
\n
或制表符\t
,字符串长度将增加1因为请求的“\n”和“\t”各为两个字符。您可以复制粘贴具有预期输出的文件样本吗?作为起点,您可能希望在
awk
中查看此操作。举个例子会很有用!您是实际的选项卡吗?您的6位数字总是以记录开头,还是也可以在记录的后面找到?这是一个实际的选项卡
123567\t another string
this time
it goes over
multiple lines
124567\t a normal string again
bash-3.1$ sed -En '/^[0-9]{6,10}/!{:a;H;n;/^[0-9]{6,10}/!ba;x;s/\n/\\n/g;s/\t/\\t/g;p};/^[0-9]{6,10}/{x;s/\t/\\t/g;1!p;x;h;z;}' input.txt