Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash sed查找并替换与第一个实例的匹配_Bash_Unix_Sed - Fatal编程技术网

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>