求一脚本:根据字符串列表替换某个文档内相应的字符串
- 0次
- 2021-07-08 17:23:08
- idczone
根据一个字符串列表,将一个 html 文件内相应的字符串字体加粗
假设字符串列表 fileA.txt 内容如下:
强调
重要
突出
夸大
……
fileB.html 内容包含如下文字:
“盲目夸大自己经验的重要性,把自己有限的经验、体会套用于所有 问题,过分强调某些突出的症状体征,而忽略其他一般的体征”
替换结果为:
“盲目夸大自己平时经验的重要性,把自己有限的经验、体会套用于所有 问题,过分强调某些表面上突出的症状体征,而忽略其他一般的体征”
exp=`cat fileA.txt | tr '\n' '|' | sed 's/|$//'`
sed -r -i "sfileB.html
哇,非常感谢!我试试
错误提示:
sed: -e expression char 42: Invalid preceding regular expression
悲催的文科生,希望能再指点一下
好了,少了个空格
不过替换结果有问题,替换成了Use…………
每个字母都被替换了
fileA.txt 必须一行一个词,且前后都不能有空格,也不能有空行。上面写的命令对 fileA.txt 格式要求比较高。下面的是兼容版吧。
exp=`cat fileA.txt | sed -r -e 's/\s+//g' -e '/^$/d' | tr '\n' '|' | sed 's/|$//'`
sed -r -i "sfileB.html
fileA.txt 就是一行一词没有空格空行
现在好了,再次感谢!
大神,刚才忽略了一个问题, html 文件有很多,怎么样在上边的基础上批量处理当前目录或者某个目录下所有的 html 文件呢?
可以简单的学一下 Python ,以后这种问题就不用求助别人了~
遍历关键词列表,然后 html_content.replace(keyword, "" + keyword + "")就好了~
也可以用 Ajax 读取文件,用 JavaScript 修改 document 内容。
最后一条命令改为:
sed -r -i "s*.html
很简单的 shell 脚本我还可以凑合着写个,但是对于没有任何语言基础的文科生来说,面对一个临时遇到的问题时,即使 python 这种简单的语言学习成本也不低啊,所以只好来这里厚着脸皮求助这种也许在你门看起来小儿科的问题。不过你说得对,是该学一下 python 之类的。
今天解决了我很大的问题,没想到可以这么方便,几十书几百个文件一下子就搞定了,唯一有点遗憾的是,假设 fileA 列表里包含“ break ”,那么 fileB 里“ She began to skip breakfast and lunch ”会被替换成:
She began to skip breakfast and lunch
是不是可以加两个空格的标记,只替换完整单词?
那就得看你平时遇到这种问题多不多了,多的话,学习一下还是有必要的。
word 和 excel 也是很强大的工具
没想到还有英文,这个没考虑到。下面的命令兼容了英文和汉字。
exp=`cat fileA.txt | sed -r -e 's/\s+//g' -e '/^$/d' | awk '{if($0 ~ "\\\w+"){print "\\\b"$0"\\\b"}else{print}}' | tr '\n' '|' | sed 's/|$//'`
sed -r -i "s*.html
全部是英文。。。我没描述清楚,以为用中文举例比较容易明白
现在的替换结果好像还是把所有字符包括空格都给替换了, fileA 是一行一个词,没有空格和空行
<!DOC
提示: awk: cmd. line:1: ^ invalid char '�' in expression
囧,是我浏览器开了货币转换插件,已经没问题了
耽误你不少时间,感激不尽!
其实大概用不着这么多工具啊,胶水要用好……
-f 步骤用 sed 生成一个脚本传入给 sed
sed -f <(sed -e 's/@/\\@/g' -e 's/^/[email&-e 's/$/@\\0<\/b>@g/g' word
) foo.html
是的,我完全没用上 ERE 。另外我这里只自动 escape 了一个 at ,要用的话别忘了别的 regex metachar ……
另外如果你的 shell 不支持 process subst 的话,那么就变成
括号里的东西 | sed -f - foo.html
这样读标准输入吧。/dev/stdin 也可以试试。
还有,你的例子大坑啊,后边有个 trailing space 。
感谢指导!不过没看明白,测试了一下也没成功
大神, sed 能排除 html 标签<>里的内容不替换吗?研究了一天 sed ,都是一匹配<>,整行就被跳过了
worksforme. 都说了你自己搞 trailing space 喂人吃瘪。我自己打一遍不带空格的:
test code:
sed -f <(sed -e 's/@/\\@/g' -e 's/^/[email&-e 's/$/@\\0<\/b>@g/g' <强调
重要
突出
夸大
trailing space
stupid
WORD
)<“盲目夸大自己经验的重要性,把自己有限的经验、体会套用于所有 问题,过分强调某些突出的症状体征,而忽略其他一般的体征”
It's stupid to trailing spaces in your pattern file to make people's life suck.
TEXT
“盲目夸大自己经验的重要性,把自己有限的经验、体会套用于所有 问题,过分强调某些突出的症状体征,而忽略其他一般的体征”
It's stupid to trailing spaces in your pattern file to make people's life suck.
我不想做擅自 trim 字符串的事情。你真要的话括号内的那个 sed 自己首先加个 -e 's/[[:space]]+//g'。
另外, Process substitution requires bash, ksh9x or zsh.
…… lives*
-e 's/[[:space]]+$//g'