Bash sed查找并替换与第一个实例的匹配
我有一个字符串Bash sed查找并替换与第一个实例的匹配,bash,unix,sed,Bash,Unix,Sed,我有一个字符串数据库,我想使用 echo '<TH bgcolor=#7070ff>DATAbase</th> ' | sed "s/\<TH.*\>/<th>/" echo“数据库”sed“s/\/” 但是,这会产生而不是数据库 有人能解释一下为什么sed与'>'的第二个实例匹配吗 通读这本书我搞不懂 编辑: echo '<TH bgcolor=#7070ff>DATAbase</th> ' | sed 's|\(&l
数据库
,我想使用
echo '<TH bgcolor=#7070ff>DATAbase</th> ' | sed "s/\<TH.*\>/<th>/"
echo“数据库”sed“s/\/”
但是,这会产生
而不是数据库
有人能解释一下为什么sed与'>'的第二个实例匹配吗
通读这本书我搞不懂
编辑:
echo '<TH bgcolor=#7070ff>DATAbase</th> ' | sed 's|\(<TH[^<]*>\)|<th>|g'
echo'DATAbase'| sed's | \(尝试:
echo“数据库”| sed“s//”
您可以尝试此sed命令
sed 's|<TH[^>]*>|<th>|g' file
sed's |]*>| | g'文件
示例:
如果要保留第一个
的原样
$ echo '<TH bgcolor=#7070ff>DATAbase</th> ' | sed 's/^\([^ ]*\)[^>]*\(.*\)$/\1\2/g'
<TH>DATAbase</th>
$echo'DATAbase'\sed's/^\([^]*\)[^>]*\(.*\)$/\1\2/g'
数据库
如果您希望
以小写字母显示,请尝试以下操作:
$ echo '<TH bgcolor=#7070ff>DATAbase</th> ' | sed 's/^\([^ ]*\)[^>]*\(.*\)$/<th\2/g'
<th>DATAbase</th>
$echo'DATAbase'| sed's/^\([^]*\)[^>]*\(.*\)$/|g'
数据库
说明:
]*>
与
中的字符零次或多次匹配,后跟符号
。因此它与字符串
匹配。此匹配字符串已替换为
sed:非法选项--r bash shellwait。正在更新我的答案。谢谢@AvinashRaj,在sed命令中使用/和|有什么区别?@liz_ophichus如果输入包含/
请使用不同的sed分隔符。运气不好-$echo“DATAbase”\124; sed“s/\/”DATAbase
$ echo '<TH bgcolor=#7070ff>DATAbase</th> ' | sed 's/^\([^ ]*\)[^>]*\(.*\)$/<th\2/g'
<th>DATAbase</th>
$ echo '<TH bgcolor=#7070ff>DATAbase</th> ' | sed 's|<TH[^>]*>|<th>|g'
<th>DATAbase</th>