使用 sed 删除分隔符之前的空格

使用 sed 删除分隔符之前的空格

我有以下格式的数据想要输入到 LibreOffice calc 中

data | num   | num | num     | num

由于某种原因,Libreoffice 默认情况下不认为字符串“3214”是数字(尾随空格)。

我想替换(\s)*||where\s代表空间和*Kleene 星操作。并在每行的多个位置执行此操作(所有匹配项)。

我试过:

sed  -i 's/(\s)*|/|/' DataStats0914.txt

但没有效果。

答案1

你为什么要引用它?如果您想要参考,请使用\(and\)代替,

另外,请注意该g选项,因为该模式会出现多次

sed -i 's/\s*|/|/g' DataStats0914.txt

测试用例:

echo 'data | num | num | num | num' | sed 's/\s*|/|/g'

得到:

data| num| num| num| num

答案2

有几种不同的正则表达式语法。(\s*)匹配一系列空白珀尔以及许多其他模仿其正则表达式的现代程序。 Sed 使用旧版本基本正则表达式其中括号代表其本身并\(…\)用于分组。 GNU sed(Linux 上的版本)有一个-r使用选项扩展正则表达式(Perl 正则表达式进一步扩展)。此外,|在 BRE 中代表自身,但在 ERE 中前面必须有反斜杠。

s/[ \t]\+|/|/|用GNU sed替换后面跟着 a 的空格。如果您想要 POSIX 兼容的 sed 命令,请使用s/[ ][ ]*|/|/每对括号包含一个空格和一个制表符的位置,因为\t\+是 GNU 扩展。此外,该s命令仅替换每行出现的一个:添加g后缀以替换所有出现的情况。

sed  -i 's/[ \t]\+|/|/g' DataStats0914.txt

答案3

sed 删除空格:

sed -i 's/ *|/|/g' file

答案4

Pythonish 三线,未经测试:

python -c 'import sys
for l in sys.readlines():
    print("| ").join([f.strip() for f in l.strip().split("|")])'

相关内容