在一行中删除两个字符串之间的字符串
问题描述:
我想删除括号内的所有内容<>,如果一行只有一行<>,但是如果行有多个,它似乎删除里面的所有内容外部<>。在一行中删除两个字符串之间的字符串
echo "hi, <how> are you" | sed 's/<.*>//'
result: hi, are you
echo "hi, <how> are <you>? " | sed 's/<.*>//'
result: hi, ?
第一回声工作正常,但如果一个sentense有不止一个<>,它不能归类。
expected input: 1 <a> 2 <b> 3 <c> 4 <d> ...... 1000 <n>
expected out come: 1 2 3 4 .... 1000
感谢
答
使用awk
:
# 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
+1
它的工作原理,由于 –
答
继awk将你有所帮助。
echo "hi, <how> are <you>? " | awk '{for(i=1;i<=NF;i++){if($i~/<.*>/){$i=""}}} 1'
OR
echo "1 <a> 2 <b> 3 <c> 4 <d> ...... 1000 <n>" | awk '{for(i=1;i<=NF;i++){if($i~/<.*>/){$i=""}}} 1'
说明:通过该行的所有字段只是要(通过启动一个for循环,其开始从i=1
耕种的NF
(数字字段的值)),那么我检查一个字段的值是否满足正则表达式<.*>
(意味着它),然后我将它取消。
答
*
零次或多次与贪婪匹配。使用否定字符类<[^>]*>
echo "hi, <how> are <you>? " | sed 's/<[^>]*>//g'
+0
它的工作原理,谢谢 –
''<.>它应该是'<.>'或'] *>' – mkHun