我有一个文本文件,它的数据格式如下:
(1796208919349287,2592294224942165,1527446512828944,'abc','<a href=\'/users/7310739222965755\'>@xxd</a> Hello World!',
(2027149921324245,1612506768201878,2155431015165304,'def','<a href=\'/users/1696908528085920\'>@xyz</a> Would you like to.....?'
........
我愿意从文本文件中删除<a href=\'/users/7310739222965755\'>
和</a>
。数据应该是这样的:
(1796208919349287,2592294224942165,1527446512828944,'abc','@xxd Hello World!',
(2027149921324245,1612506768201878,2155431015165304,'def','@xyz Would you like to.....?'
........
我试过的命令是:
sed 's/<a href=\'\/users\/[[:digit:]]{16}\'\/'/ /g' file.sql
但它不起作用。
请指教!
非常感谢!
答案 0 :(得分:1)
在POSIX标准sed
中,您需要使用\{16\}
来包含计数。
您还需要非常小心单引号。要在shell中的单引号字符串中嵌入单引号,您需要使用序列:
'\''
第一个引号结束当前单引号字符串;反斜杠引用嵌入单引号;然后最后一个单引号恢复单引号字符串。你还需要注意字符串中的反斜杠;它们对sed
(以及shell)有意义。
这导致:
sed -e 's/<a href=\\'\''\/users\/[[:digit:]]\{16\}\\'\''>/ /g' \
-e 's/<\/a>/ /g' \
file.sql
警告:未经测试的脚本。
答案 1 :(得分:1)
您需要为初学者添加更多转义功能。这是一个工作版本:
sed -e "s/<a href\=\\\'\/users\/[[:digit:]]\{16\}\\\'>\([^<]*\)<\/a>/\1/g"
除非你有特殊的理由使用sed,否则我建议使用perl,因为需要更少的转发
cat test.txt | perl -pe "s/<a href=\\\'\/users\/\d{16}\\\'>([^<]*)<\/a>/\1/g"
答案 2 :(得分:0)
这可能对您有用:
sed 's/<a href[^>]*>\([^<]*\)<\/a>/\1/' file
(1796208919349287,2592294224942165,1527446512828944,'abc','@xxd Hello World!',
(2027149921324245,1612506768201878,2155431015165304,'def','@xyz Would you like to.....\uff1f'
.......
答案 3 :(得分:0)
如果要删除所有xml标记:
sed 's/<[^>]*>//g'