摆脱两个;仅当字符仅包含空格时使用 sed
Getting rid of two ; characters only if they contain only blanks, with sed
我有一个包含大量 ;
个字符的文件,这些字符充当 delimiter/separator。在某些地方,它们是多余的。有 ;;
、;;;
、; ;
等形式的字符序列。有没有一种方法可以去掉其中一个分号以及它们之间的内容,前提是它们之间除了空格之外什么都没有?
换句话说,我想将 text; ; text; text;
转换为 text; text; text;
,只需将我上面提到的任何一种形式替换为一种 ;
。我想过使用 sed
,但如果另一个命令可以完成这项工作,我当然可以接受。
我正在使用 OS X Yosemite.
这应该有效:
sed 's/;\( *;\)\{1,\}/;/g'
另一种选择是
sed 's/\(; *\)\{1,\}/; /g'
使用 GNU sed,您可以使用 \+
而不是 \{1,\}
而不是 \+
。您还可以使用扩展的正则表达式(BSD sed 上的 -E
,Gnu sed 上的 -r
)以获得更具可读性的正则表达式:
sed -E 's/;( *;)+/;/g'
sed -E 's/(; *)+/;/g'
这两种形式的区别在于,第二种形式总是确保分号后有一个space。 (都没有修复系列中第一个分号之前的 spaces。如果需要,请将 *
添加到模式的开头。)
我有一个包含大量 ;
个字符的文件,这些字符充当 delimiter/separator。在某些地方,它们是多余的。有 ;;
、;;;
、; ;
等形式的字符序列。有没有一种方法可以去掉其中一个分号以及它们之间的内容,前提是它们之间除了空格之外什么都没有?
换句话说,我想将 text; ; text; text;
转换为 text; text; text;
,只需将我上面提到的任何一种形式替换为一种 ;
。我想过使用 sed
,但如果另一个命令可以完成这项工作,我当然可以接受。
我正在使用 OS X Yosemite.
这应该有效:
sed 's/;\( *;\)\{1,\}/;/g'
另一种选择是
sed 's/\(; *\)\{1,\}/; /g'
使用 GNU sed,您可以使用 \+
而不是 \{1,\}
而不是 \+
。您还可以使用扩展的正则表达式(BSD sed 上的 -E
,Gnu sed 上的 -r
)以获得更具可读性的正则表达式:
sed -E 's/;( *;)+/;/g'
sed -E 's/(; *)+/;/g'
这两种形式的区别在于,第二种形式总是确保分号后有一个space。 (都没有修复系列中第一个分号之前的 spaces。如果需要,请将 *
添加到模式的开头。)