2012-08-16 34 views
7

我有一個包含很多百分比,加號和管道符號的文檔。我想用代碼替換它們,用於TeX。如何查找和替換所有百分比,加號和管道標誌?

  • %變成\textpercent
  • +變成\textplus
  • |變成\textbar

這是我使用的代碼,但它不工作:

sed -i "s/\%/\\\textpercent /g" ./file.txt 
sed -i "s/|/\\\textbar /g" ./file.txt 
sed -i "s/\+/\\\textplus /g" ./file.txt 

我如何用這個代碼替換這些符號?

+0

你提到的命令在我的地方工作。 – Vijay 2012-08-16 12:40:03

+0

您可以將所有三個腳本合併成一個sed腳本,並丟失無用的反斜槓。 'sed -i -e's /%/ \\ textpercent/g; s/+/\\ textplus/g; s/|/\\ textbar/g'file.txt' – tripleee 2012-08-16 12:40:33

+0

要「成功替換每個百分數,加上,並從我的文件管道標誌「您將不得不爲我們提供您的文件。 – 2012-09-02 08:11:19

回答

10

測試腳本:

#!/bin/bash 

cat << 'EOF' > testfile.txt 
1+2+3=6 
12 is 50% of 24 
The pipe character '|' looks like a vertical line. 
EOF 

sed -i -r 's/%/\\textpercent /g;s/[+]/\\textplus /g;s/[|]/\\textbar /g' testfile.txt 

cat testfile.txt 

輸出:

1\textplus 2\textplus 3=6 
12 is 50\textpercent of 24 
The pipe character '\textbar ' looks like a vertical line. 

這已經建議由@tripleee類似的方式,我看不出有任何理由不應該工作。如您所見,我的平臺使用與您的GNU sed版本相同的版本。與@dieeee的版本唯一的區別是我使用擴展正則表達式模式,所以我必須逃脫管道和加號,或者把它放到一個帶有[]的字符類中。

2

使用單引號:

$ cat in.txt 
foo % bar 
foo + bar 
foo | bar 
$ sed -e 's/%/\\textpercent /g' -e 's/\+/\\textplus /g' -e 's/|/\\textbar /g' < in.txt 
foo \textpercent bar 
foo \textplus bar 
foo \textbar bar 
+0

...可能使用另一個分隔符而不是'/',以提高可讀性。我可以建議一個'#' – 2012-08-16 12:41:33

+1

我不認爲需要使用另一個分隔符,因爲'/'是*只*用作分隔符。 – 2012-08-16 12:42:50

3
nawk '{sub(/%/,"\\textpercent");sub(/\+/,"\\textplus");sub(/\|/,"\\textpipe"); print}' file 

如下測試:

> echo "% + |" | nawk '{sub(/%/,"\\textpercent");sub(/\+/,"\\textplus");sub(/\|/,"\\textpipe"); print}' 
\textpercent \textplus \textpipe 
+0

有沒有辦法讓這些更改發生在同一個文件中,而不必將結果發送到新文件? – Village 2012-08-17 00:10:04

+0

不錯! nawk和gawk相當強大!強烈建議,通過瀏覽他們的手冊頁和一些在線文檔。 (另請參閱:nawk/gawk中的gsub命令,它將替換所有出現的內容,而不僅僅是第一個。) – Andrew 2017-09-13 17:11:52

+0

@Village只需在文件末尾添加'> filePath'即可將輸出重定向到文件(其中filePath爲eg /家用/用戶名/ myfile')。 – Andrew 2017-09-13 17:12:41