我有一个UTF-8-BOM编码的文本文件,其中大多数行以6-10位开头(数字每行增加)并且后面有一个字符串。
我想得到每一条"线" (包括数字)在我的bash脚本中进一步处理。
通过使用sed -n '$line\p'
的for循环很容易做到但不幸的是我需要的一些字符串作为其中的一部分,所以我需要一种提取字符串的方法在两个6位以上的数字(包括第一个数字)之间标记一个新行。
3"行"的例子:
123456\tA random string here
123567\t another string
this time
it goes over
multiple lines
124567\t a normal string again
我需要什么:
123456\tA random string here
,
123567\t another string
this time
it goes over
multiple lines
和
124567\t a normal string again
一些事情:
\t
或\n
我还是新来的,所以如果我把它放在错误的地方或已经回答过,请告诉我!
答案 0 :(得分:0)
我希望“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另一个字符串\ nthis time \ nit over over \ nmultiple lines
124567 \ t再次正常字符串
我认为相关的6-10位数字也总是在一行的开头,
否则会变得更棘手。
注意:
每个换行符\n
或制表符\t
的字符串长度将增加1;
因为请求的“\ n”和“\ t”分别是两个字符。