Perl 删除一行中两个字符串之间的字符串

Perl 删除一行中两个字符串之间的字符串,perl,awk,sed,Perl,Awk,Sed,我试图删除括号中的所有内容,如果一行只有一行,我可以这样做,但如果一行有多行,它似乎删除了外部的所有内容 第一个回波工作正常,但如果一个信号有多个,它就无法分类 expected input: 1 <a> 2 <b> 3 <c> 4 <d> ...... 1000 <n> expected out come: 1 2 3 4 .... 1000 谢谢以下awk将对您有所帮助 echo "hi, <how> are <

我试图删除括号中的所有内容,如果一行只有一行,我可以这样做,但如果一行有多行,它似乎删除了外部的所有内容

第一个回波工作正常,但如果一个信号有多个,它就无法分类

expected input: 1 <a> 2 <b> 3 <c> 4 <d> ...... 1000 <n>
expected out come: 1 2 3 4 .... 1000

谢谢

以下awk将对您有所帮助

echo "hi, <how> are <you>? "  | awk '{for(i=1;i<=NF;i++){if($i~/<.*>/){$i=""}}} 1'

解释:只需遍历该行的所有字段,通过启动一个从i=1到NFnumber字段值的for循环,我检查字段的值是否满足regex的要求,意味着它已经满足,然后我将使其无效。

使用awk:

*与贪婪匹配零次或多次。使用否定字符类]*>

应该是或]*>
echo "hi, <how> are <you>? "  | awk '{for(i=1;i<=NF;i++){if($i~/<.*>/){$i=""}}} 1'
echo "1 <a> 2 <b> 3 <c> 4 <d> ...... 1000 <n>"  | awk '{for(i=1;i<=NF;i++){if($i~/<.*>/){$i=""}}} 1'
# using gsub - recommended 
$ echo "1 <a> 2 <b> 3 <c> 4 <d> ...... 1000 <n>" | awk 'gsub(/<[^>]*>/,"")' 
1  2  3  4  ...... 1000 

# OR using FS and OFS
$ echo "1 <a> 2 <b> 3 <c> 4 <d> ...... 1000 <n>" | awk -F'<[^>]*>' -v OFS='' '$1=$1'
1  2  3  4  ...... 1000 
echo "hi, <how> are <you>? " | sed 's/<[^>]*>//g'