我有一个 CSV 文件,其中的行类似于:
PerformanceData|712899|713|12|5.53|VERIFIED_TRADE N CoverDistribution SecurityTransfer (BondUKTI / //-MO/W////.%)|5708|124.9
( )
在第 6 列中,我需要从 CSV 的每一行中删除一个块。这是唯一会出现括号的地方。
其中出现的内容没有模式,( )
但它总是包含在 中( )
。
预期输出为:
PerformanceData|712899|713|12|5.53|VERIFIED_TRADE N CoverDistribution SecurityTransfer|5708|124.9
我是 Linux 新手,有人可以帮我获取 Linux 命令吗?
答案1
假设您只想删除任何括号及其前面的空格,并且假设括号的内容从不包含换行符,您可以使用
$ sed 's/ ([^)]*)//' file
PerformanceData|712899|713|12|5.53|VERIFIED_TRADE N CoverDistribution SecurityTransfer|5708|124.9
该表达式 ([^)]*)
将匹配一个空格,后跟(
,后跟任意数量的非 字符)
,最后跟一个)
。这将从数据中删除。如果您希望一行中包含多个括号,请添加g
(如 中所示)。s/ ([^)]*)//g
如果您需要在括号前后允许任意数量的空格,请使用s/[[:blank:]]*([^)]*)[[:blank:]]*//
.每个[[:blank:]]*
都匹配任意数量的空格或制表符。
答案2
我们可以通过多种方式编写脚本并进行全面优化,试试这个:
#!/bin/bash
while IFS= read -r line
do
echo $line | cut -d "(" -f1 |xargs echo -n>> new.csv
echo $line | cut -d ")" -f2 >> new.csv
done < input.cvs