我有以下格式的数据想要输入到 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("|")])'