用"\#","\ $","\%","\&"和"\ _"替换"#","$","%","&"和"_"

Vil*_*age 12 bash grep latex escaping sed

我有一个纯文本文档,我想在LaTeX中编译.但是,有时它有字符"#","$","%","&"和"_".要在LaTeX中正确编译,我必须先用"#","\ $","\%","\&"和"_"替换这些字符.我用过这一行sed:

sed -i 's/\#/\\\#/g' ./file.txt
sed -i 's/\$/\\\$/g' ./file.txt
sed -i 's/\%/\\\%/g' ./file.txt
sed -i 's/\&/\\\&/g' ./file.txt
sed -i 's/\_/\\\_/g' ./file.txt
Run Code Online (Sandbox Code Playgroud)

它是否正确?

遗憾的是,该文件太大而无法在任何GUI软件中打开,因此sed使用文本编辑器检查我的行是否正确是很困难的.我尝试搜索grep,但搜索没有按预期工作(例如下面,我搜索任何包含"$"的行):

grep "\$" file.txt
Run Code Online (Sandbox Code Playgroud)
  • 将"\"放在这些角色前面的最佳方法是什么?
  • 如何使用grep替换成功检查线路?

che*_*ner 21

您只需拨打一次电话即可进行更换sed:

sed -i -E 's/([#$%&_\])/\\&/g' file.txt
Run Code Online (Sandbox Code Playgroud)

&置换文本中填写的为准单个字符括号括起来.请注意,由于\是LaTeX转义字符,因此您必须在原始文件中将其转义.

  • 括号不是必需的.某些版本的`sed`不支持`-E`,而是使用`-r`代替.某些版本的`sed`在`-i`之后需要扩展,但由于OP没有在问题中提供一个扩展,因此可以安全地假设它不需要. (3认同)
  • 好的,所有.我要提到的是-E将取决于使用中的版本,但必须从最终版本中删除它. (2认同)