乳胶的字符串替换shell

时间:2014-04-24 11:50:11

标签: regex shell sed latex quotes

我正在尝试调整文章以将其包含在LaTeX文档中。为此,我使用sed替换字符。但是,我发现自己有一些问题,如引号。例如,使用此段落:

  

Los problemas de Europa no son los mismos en todoslospaíses。 “Alemanianoestácreciendorápidamente,perosconsiguióevitarlarecaídaenlarecesión”,骰子吉伦。 “En Irlanda,por ejemplo,laconomíacayóun20%.En Francia,lasituaciónnoes desesperada,peroelpaísampocoes ninguna Alemania”。 Mientras,Italia和Españahanvuelto a caer enlarecesión,y Reino Unido acaba de anunciarqueestánuevamenteenrecepsión。

“符号(单个字符中的双引号)应该更改为``如果它出现在单词的开头但是变为''(它们是2个字符:\ x27 \ x27)如果它在所以结果段落应该是(%sysmbol也被改变了):

  

Los problemas de Europa no son los mismos en todoslospaíses。 ``Alemanianoestácreciendorápidamente,perosconsiguióevitarlarecaídaenlarecesión'',骰子吉伦。 ``En Irlanda,por ejemplo,laconomíacayóun20 \%。 En Francia,lasituaciónnoes desesperada,peroelpaísampiocoes ninguna Alemania''。 Mientras,Italia和Españahanvuelto a caer enlarecesión,y Reino Unido acaba de anunciarqueestánuevamenteenrecepsión。

我认为在开始时将空格符号和单词组合起来的正则表达式应该可以正常工作,并且最后可以使用类似的正则表达式,但我不知道该怎么做。

3 个答案:

答案 0 :(得分:2)

您可以检查"是在行的开头还是在空格之前:

sed -r 's/(^| )"/\1``/g' filename

如果您的sed版本不支持扩展正则表达式,您可以说:

sed 's/\(^\| \)"/\1``/g'` filename

要转义%以及其他字符,例如&$,您可以使用字符类一次性转义所有这些字符:

sed -r 's/([$%])/\\\1/g' filename

这两者也可以结合起来:

sed -r 's/(^| )"/\1``/g; s/([$%])/\\\1/g' filename
编辑:从您的澄清,您似乎需要说:

sed -r 's/(^| )"/\1``/g;s/"/'"''"'\1/g' filename

答案 1 :(得分:1)

这个awk应该将“改为”,如果它在一个单词的开头。

awk '{for (i=1;i<=NF;i++) if ($i~/^"/) sub(/"/,"``",$i)}1' file
Los problemas de Europa no son los mismos en todos los países. ``Alemania no está creciendo rápidamente, pero consiguió evitar la recaída en la recesión", dice Guillen. ``En Irlanda, por ejemplo, la economía cayó un 20%. En Francia, la situación no es desesperada, pero el país tampoco es ninguna Alemania". Mientras, Italia y España han vuelto a caer en la recesión, y Reino Unido acaba de anunciar que está nuevamente en recesión.

逐个测试,看看它是否以"开头,如果是,则更改它。

答案 2 :(得分:0)

对于posix

sed "s/^\"/``/;s/ \"/ ``/g;s/\"$/''/;s/\" /''/g" YourFile > TempFile
mv TempFile YourFile

用于gnu sed版本(此处不测试机器验证)

sed -r "s/\( |^\)\"/\1``/g;s/"\( |$)/''\1/g" YourFile