String Bash获取2个6位数字之间的字符串

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 , 及 有几件事: 字符串没有被“”包

我有一个UTF-8-BOM编码的文本文件,其中很多行都以6-10位数字开头(每行数字都会增加),后面有一个字符串

我想在bash脚本中进一步处理这些“行”(包括数字)

只需在
sed-n'$line\p'
中使用for循环就很容易做到,但不幸的是,我需要的一些字符串中有换行符,因此我需要一种方法来提取两个6位以上数字(包括第一个数字)之间的字符串,这两个数字表示新行

3条“线”的示例:

我需要的是:

123456\tA random string here
,

有几件事:

  • 字符串没有被“”包围
  • 字符串包含的所有数字均为=6位数字。数字始终是新字符串行的开头
  • 数字会增加,因此字符串前面的数字总是小于后面的数字
  • 我想将所有特殊字符(如制表符或换行符)转换为
    \t
    \n
  • 稍后我需要在脚本中获取字节长度,字符串必须保持其长度
我还是新来的,所以如果我把它放错地方了,或者它已经被回答了,告诉我

我希望“UTF-8-BOM编码”不是陷阱。
如果不是的话,这是我的建议

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