我有一个有400万行的文件,每行都以char $结尾,但是我在拼写一个网站的时候在行分隔符后面添加了一个新行,所以现在看起来像这样:
fist name, last name, phone, address, postal code, city, region,$ $ fist name, last name, phone, address, postal code, city, region,$ $
新行'$'只显示当然,如果我使用:设置列表,但我想用这个文件在mysql中批量插入,我现在有问题。
我想将文件更改为:
fist name, last name, phone, address, postal code, city, region,$ fist name, last name, phone, address, postal code, city, region,$
我怎样才能做到这一点? 用sed或awk甚至vi? 抬起头,我发现什么不适用于这种情况。
请不要考虑上面多余的空行。
提前致谢
用sed
删除空行:
sed -i '/^$/d' yourfile.csv
删除由单个$
组成的行:
sed -i '/^$$/d' yourfile.csv
大多数版本的sed支持-i
开关; 如果你的不是,你需要例如sed '/^$$/d' yourfile.csv > newfile.csv
。
用空格去除空白行比较复杂。 这通常工作:
sed '/^ *$/d' yourfile.csv
如果这还不够,请尝试检查标签。 对于老年人sed,这将工作:
sed '/^[ X]*$/d' yourfile.csv
这里X
是一个制表符,通过Control-V Tab键进入。
较新的sed将采用[ \t\r]*
或\s*
或[[:space:]]*
,有时需要-E
开关。
grep
可以通过匹配(或否定匹配)来对正则表达式进行过滤。 要排除空行:
grep -v '^$' yourfile.csv > yourfile_fixed.csv
这里是你的选择:
awk
: awk 'NF' file > tmp && mv tmp file
sed
(就地更改,因此请确保使用-i.bak
备份您的文件): sed -i '/^$/d' file
vi
: :g/^$/d