2017-05-08 44 views
0

我有一個包含以下內容(與行號一起)的文件之間刪除文本:的Linux/bash的每2次出現的「^ [」字符

 1 Started by user ^[[8mha:AAAAmx+LCAAAAAAAAP9b85aBtbiIQTGjNKU4P08vOT+vOD8nVc83PyU1x6OyILUoJzMv2y+/JJUBAhiZGBgqihhk0NSjKDWzXb3RdlLBUSYGJk8GtpzUvPSSDB8G5tKinBIGIZ+sxLJ  E/ZzEvHT94JKizLx0a6BxUmjGOUNodHsLgAzeEgZ+/dLi1CL9jMSi4ozMvMxsAJ8wnzvEAAAA^[[Blahblah 
     2 [abc] - Loading variables. 
     3 Building on master 
     4 [test] 
     5 Started job 
     6 Build log at - /xyz/file 
     7 Ended job 
     8 Started by user ^[[8mha:AAAAmx+LCAAAAAAAAP9b85aBtbiIQTGjNKU4P08vOT+vOD8nVc83PyU1x6OyILUoJzMv2y+/JJUBAhiZGBgqihhk0NSjKDWzXb3RdlLBUSYGJk8GtpzUvPSSDB8G5tKinBIGIZ+sxLJ  E/ZzEvHT94JKizLx0a6BxUmjGOUNodHsLgAzeEgZ+/dLi1CL9jMSi4ozMvMxsAJ8wnzvEAAAA^[[computer 
     9 Started job 

我想刪除所有每2次出現的字符^[[(包括字符)之間的文本,我的新文件看起來像這樣:

 1 Started by user Blahblah 
     2 [abc] - Loading variables. 
     3 Building on master 
     4 [test] 
     5 Started job 
     6 Build log at - /xyz/file 
     7 Ended job 
     8 Started by user computer 
     9 Started job 

我怎麼能做到這一點的Bash的?

+0

你試過了什麼?大多數情況下,這應該是相當平凡的。 – grail

+0

只需使用sed。調用是微不足道的。 – paddy

+0

請看看:[我應該怎麼做當有人回答我的問題?](http://stackoverflow.com/help/someone-answers) – Cyrus

回答

2

假設有永遠只能兩個在行,你可以使用:

sed 's/\^\[\[.*\^\[\[//' 

按照以下成績單:

pax> echo '1 Started by user ^[[REMOVE-ME^[[Blahblah 
...> 2 [abc] - Loading variables. 
...> 3 Building on master 
...> 4 [test] 
...> 5 Started job 
...> 6 Build log at - /xyz/file 
...> 7 Ended job 
...> 8 Started by user ^[[REMOVE-ME-AS-WELL^[[computer 
...> 9 Started job' | sed 's/\^\[\[.*\^\[\[//' 

1 Started by user Blahblah 
2 [abc] - Loading variables. 
3 Building on master 
4 [test] 
5 Started job 
6 Build log at - /xyz/file 
7 Ended job 
8 Started by user computer 
9 Started job 

sed命令只是替換了第一個和最後^[[之間的一切序列中沒有任何內容,其中的\字符只是簡單地轉義了那些對於正則表達式引擎專用的字符。

有一點需要注意,如果分隔符與您描述的完全相同,那麼這個功能就會起作用。我只提到這一點,因爲^[有時代表ESC字符。如果的情況下,你需要調整正則表達式來適應:

sed 's/\x1b\[.*\x1b\[//' 
1

我建議:

sed 's/\(\^\[\[\).*\1//' file 

如果你想編輯文件「就地」用sed的選項-i

相關問題