我有几百行的CSV文件,这些行中有很多(不是全部)包含我要提取的数据(Klas / Lesgroep:;; T2B1)。 即 ;;;;;; Klas / Lesgroep:;; T2B1 ;;;;;;;;;;;
我想删除Klas / Lesgroep前面的分号,但分号的数量是可变的。如何在Bash中删除这些分号?
我不是英语本地人,所以我希望你能清楚
答案 0 :(得分:1)
使用sed,您可以搜索以至少一个分号后跟Klas/Lesgroep
开头的行,如果找到,则无需替换前导;
:
$ sed '/;;*Klas\/Lesgroep/s/^;*//g' <<< ";;;;;;Klas/Lesgroep:;;T2B1;;;;;;;;;;"
Klas/Lesgroep:;;T2B1;;;;;;;;;;
答案 1 :(得分:1)
删除任何非空的;
个字符。直接来自文字Klas/Lesgroep
:
使用GNU或BSD / macOS sed
:
$ sed -E 's|;+(Klas/Lesgroep)|\1|' <<< ";;;;;;Klas/Lesgroep:;;T2B1;;;;;;;;;;"
Klas/Lesgroep:;;T2B1;;;;;;;;;;
s
函数执行字符串替换(替换):
|
作为正则表达式/参数分隔符而不是习惯/
,因为这样可以未转义使用/
个字符。 里面正则表达式。 ;+
匹配一个或多个直接相邻的;
字符。
(Klas/Lesgroep)
与文字Klas/Lesgroep
匹配并将其封装在(...)
中 - 使其成为捕获组 - 记住匹配并可以引用as \1
- 正则表达式中的第一个捕获组 - 位于s
的替换参数中。
净效应是所有;
个字符。 Klas/Lesgroep
之前的已移除。
POSIX兼容表格:
$ sed 's|;\{1,\}\(Klas/Lesgroep\)|\1|' <<< ";;;;;;Klas/Lesgroep:;;T2B1;;;;;;;;;;"
Klas/Lesgroep:;;T2B1;;;;;;;;;;
POSIX需要功能较弱且过时的BRE syntax,其中必须将复制符号+
模拟为\{1,\}
,并且通常需要模仿元字符(
,)
,{
,}
必须\
- 转义。
答案 2 :(得分:0)
删除所有“;”从文件中,我们可以使用sed命令。 sed用于修改文件。
$ sed 's/find/replace/g' file
替换标志/ g(全局替换)指定sed命令来替换行中所有出现的字符串。
所以删除“;”只需找到并替换它。
sed 's/;//g' file.csv