UNIX脚本 - 在文件的每一行中移动一个字符

时间:2010-12-10 05:39:30

标签: file unix

我有一个包含多条记录的文件,每条记录的长度为100.每行有一个长度为50个字符(25-75)的段,保留给State,Country。但是现在我需要段为State,Country(删除空间和Country),同时将字段的长度保持为50.

使用Perl命令perl -pi -e's /,/,/ g'* .txt我能够删除空格,但这会将段的长度减少到49.有没有办法可以删除空间并保持段的长度,并对文件中的所有记录执行此操作?

2 个答案:

答案 0 :(得分:0)

为什么在使用sed时可以使用Perl?尝试:

sed 's/,\(\s*\)\([^,]*\)/,\2\1/g'

将逗号和非逗号(文本)加载之间的任何空格移动到文本之后。

a, b, c

变为

a,b ,c 

(c后面有空格)

答案 1 :(得分:0)

听起来我们需要做计算 - 这是蛮力的方式:

s/^(.{24})([^,]+)( +)(.{,49})(.{25})$/$1$2$4$3$5/;

这匹配$ 1中的字符位置1-24;国家部分是2美元的第一个逗号,一个或多个空格的字符串为3美元,国家为4美元,字符位置为76-100美元。

替换会移动国家/地区之后的空白,从而保留所请求的长度。

如果你的记录不是100个字符,你得到的是......好吧,可能不是你想要的。你可以调整很多东西,但是(尽管它是未经测试的代码),这有可能是足够的,或者给你你需要的想法。