需要帮助删除文本文件中所有分隔符后的尾随空格 我有下面数据的文本文件。 例如
ADDRESS_ID| COUNTRY_TP_CD| RESIDENCE_TP_CD| PROV_STATE_TP_CD|ADDR_LINE_ONE|P_ADDR_LINE_ONE
885637959852960985.0| 76.0|||169 Park lane||Scottish||lane||KU|||||||2013-09-19 14:48:49.609000|
我想在分隔符和单词的第一个字母后删除空格。 任何可以执行相同操作的正则表达式或unix脚本。寻找输出如下:
ADDRESS_ID|COUNTRY_TP_CD|RESIDENCE_TP_CD|PROV_STATE_TP_CD|ADDR_LINE_ONE|P_ADDR_LINE_ONE
885637959852960985.0|76.0|||169 Park lane||Scottish||lane||KU||||||2013-09-19 14:48:49.609000|
任何帮助将不胜感激。
答案 0 :(得分:2)
awk 'BEGIN{FS=OFS="|"} {for (i=1;i<=NF;i++) gsub(/^[[:space:]]+|[[:space:]]+$/,"",$i)} 1' file
答案 1 :(得分:1)
使用perl one-liner去除每个字段周围的间距。假设没有嵌入分隔符:
perl -i -lpe 's/\s*([^|]*?)\s*/$1/g' file.txt
切换:
-i
:编辑<>
个文件(如果提供了扩展程序,则进行备份)-l
:启用行结束处理-p
:为输入文件中的每个“行”创建一个while(<>){...; print}
循环。 -e
:告诉perl
在命令行上执行代码。 答案 2 :(得分:0)
下面的perl代码将删除行开头处的空格或分隔符|
之后的空格,
$ perl -pe 's/(?<=\|) +|^ +//g' file
ADDRESS_ID|COUNTRY_TP_CD|RESIDENCE_TP_CD|PROV_STATE_TP_CD|ADDR_LINE_ONE|P_ADDR_LINE_ONE
885637959852960985.0|76.0|||169 Park lane||Scottish||lane||KU|||||||2013-09-19 14:48:49.609000|
要保存对该文件所做的更改,
perl -i -pe 's/(?<=\|) +|^ +//g' file
答案 3 :(得分:0)
sed 's/\ //g' input.txt > output.txt
答案 4 :(得分:0)
使用sed
:
sed -r -e 's/(^|\|)\s+/\1/g' -e 's/\s+$//' filename
在第一个表达式中:
(^|\|)
匹配行的开头或|
字符,并将其保存在捕获组1中。\s+
在此之后匹配一系列空格字符。\1
替换捕获组1,因此这将删除行开头和分隔符后的空格。g
修饰符使其对该行中的所有匹配项进行操作。在第二个表达式中:
\s+
再次匹配空白序列$
匹配行尾答案 5 :(得分:0)
for posix sed(对于GNU sed add --posix
)
sed&#39; s / ^ [[:space:]] //; s / | [[:space:]] / | / g&#39; YourFile
在sed regex posix版本中使用2替换(没有OR(|
))
^[[:space:]]*
)删除空格|[[:space:]]*
)以外的任何序列管道
醇>
如果文本只有空格(ASCII 32)char ,那么 [[:space:]]
可以替换为单个空格char