问题描述
我正在尝试注释源代码行,以便类似 LANG ='ENG'; 变成 // LANG ='ENG';
源文件中有一千多行,“ ENG”不是唯一的,而是整行。 我放弃了对通配符的疯狂梳理,只是尝试了整个现有的“按原样”行,但没有任何乐趣。 像(注释壳)之类的东西-
enter code here
#!/bin/bash
#if [ -n "$5" ] ; then
#if [ "$5" == "ENG" ] ; then
sed -i "s/' LANG = '\''ENG'\''/\/\/' LANG'
= '\''ENG'\''/" vc.pas > vc.out
#fi
#fi
因此,它减少为一行。不管我尝试什么,都没有喜悦。 TIA! 豪伊
解决方法
使用GNU sed,使用
<html>
<head>
</head>
<br>
<br>
<body>
<table class="maintable">
<table class="tablestyle">
<th colspan="4"></th>
<col span="1" class="wide">
<tr>
<th col span="1" class="thin"></th>
<th col span="1" class="thin"></th>
<th col span="1" class="thin"></th>
<th col span="1" class="thin"></th>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
</table>
<br>
<table class="tablestyle">
<th colspan="4"></th>
<col span="1" class="wide">
<tr>
<th col span="1" class="thin"></th>
<th col span="1" class="thin"></th>
<th col span="1" class="thin"></th>
<th col span="1" class="thin"></th>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
</table>
<br>
<table class="tablestyle">
<th colspan="4"></th>
<col span="1" class="wide">
<tr>
<th col span="1" class="thin"></th>
<th col span="1" class="thin"></th>
<th col span="1" class="thin"></th>
<th col span="1" class="thin"></th>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
</table>
<br>
<table class="tablestyle">
<th colspan="4"></th>
<col span="1" class="wide">
<tr>
<th col span="1" class="thin"></th>
<th col span="1" class="thin"></th>
<th col span="1" class="thin"></th>
<th col span="1" class="thin"></th>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
</table>
</table>
<table class="maintable">
<table class="tablestyle">
<th colspan="4"></th>
<col span="1" class="wide">
<tr>
<th col span="1" class="thin"></th>
<th col span="1" class="thin"></th>
<th col span="1" class="thin"></th>
<th col span="1" class="thin"></th>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
</table>
<br>
<table class="tablestyle">
<th colspan="4"></th>
<col span="1" class="wide">
<tr>
<th col span="1" class="thin"></th>
<th col span="1" class="thin"></th>
<th col span="1" class="thin"></th>
<th col span="1" class="thin"></th>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
</table>
<br>
<table class="tablestyle">
<th colspan="4"></th>
<col span="1" class="wide">
<tr>
<th col span="1" class="thin"></th>
<th col span="1" class="thin"></th>
<th col span="1" class="thin"></th>
<th col span="1" class="thin"></th>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
</table>
<br>
<table class="tablestyle">
<th colspan="4"></th>
<col span="1" class="wide">
<tr>
<th col span="1" class="thin"></th>
<th col span="1" class="thin"></th>
<th col span="1" class="thin"></th>
<th col span="1" class="thin"></th>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
</table>
</table>
<table class="maintable">
<table class="tablestyle">
<th colspan="4"></th>
<col span="1" class="wide">
<tr>
<th col span="1" class="thin"></th>
<th col span="1" class="thin"></th>
<th col span="1" class="thin"></th>
<th col span="1" class="thin"></th>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
</table>
<br>
<table class="tablestyle">
<th colspan="4"></th>
<col span="1" class="wide">
<tr>
<th col span="1" class="thin"></th>
<th col span="1" class="thin"></th>
<th col span="1" class="thin"></th>
<th col span="1" class="thin"></th>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
</table>
<br>
<table class="tablestyle">
<th colspan="4"></th>
<col span="1" class="wide">
<tr>
<th col span="1" class="thin"></th>
<th col span="1" class="thin"></th>
<th col span="1" class="thin"></th>
<th col span="1" class="thin"></th>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
</table>
<br>
<table class="tablestyle">
<th colspan="4"></th>
<col span="1" class="wide">
<tr>
<th col span="1" class="thin"></th>
<th col span="1" class="thin"></th>
<th col span="1" class="thin"></th>
<th col span="1" class="thin"></th>
</tr>
<tr>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
</table>
</table>
</body>
</html>
其中
-
sed -i "s,.*LANG *= *'ENG';.*,//&," vc.pas
-启用内联文件修改 -
-i
-替换命令 -
s
-分隔符 -
,
-包含.*LANG *= *'ENG';.*
的文本,在LANG = 'ENG';
周围有任意空格 -
=
-将匹配的行替换为//&
和行本身
这对我有用,将所有空格传递到输出:
$ echo "LANG='ENG';" | sed "s#^\(\s*LANG\s*=\s*'ENG'\s*;\)#// \1#"
// LANG='ENG';
$ echo " LANG = 'ENG' ; " | sed "s#^\(\s*LANG\s*=\s*'ENG'\s*;\)#// \1#"
// LANG = 'ENG' ;
从技术上讲,它需要在双引号引起来的字符串中使用双反斜杠,但是由于这些序列都不构成有效的转义序列,因此bash不在乎。