试图在服务器上运行一个脚本来查看一个文件的path,并replace一个单词,而它匹配在div中。
因此,需要将作者等于某个电子邮件[email protected]的查看者replace为_toself
URL = / var / www / sever / temp / fhyw1 FILE = user.txt
<div class='entry'> <div class='pageurl'>temp/fhyw1</div> <div class='context'>text</div> <div class='subject'>testing</div> <div class='notetext'></div> <div class='signed'>USER</div> <div class='author'>[email protected]</div> <div class='color'>0</div> <div class='visibility'>shared</div> <div class='to'>_toself</div> <div class='num'>4</div> </div> <div class='entry'> <div class='pageurl'>temp/fhyw1</div> <div class='context'>text</div> <div class='subject'>testing</div> <div class='notetext'></div> <div class='signed'>USER</div> <div class='author'>[email protected]</div> <div class='color'>0</div> <div class='visibility'>shared</div> <div class='to'>_viewers</div> <div class='num'>4</div> </div>
bash脚本将输出分配给variables失败
如果在Ubuntu上安装了多个Java版本,如何检查Oracle Java版本
将CSV中的第三个字段与GNU Linux(AWK / SED / GREP)中的模式文件进行匹配
如何使用“make mrproper”命令? 我正在从头开始从事Linux
Bash:在行尾find尾随空格的文件
从Java调用脚本,接收到sigpipe信号
Shell脚本ssh $ SERVER >> EOF
我可以创build一个bash脚本,它依赖于shell中以前执行的命令的退出代码吗?
这sed解决方案可能会为你工作:
sed -e '/^<div class=.entry.>/,_^</div>_{//!{H;d};_^</div>_!{h;d};x;/author.>[email protected]/s/_toself/SUBSTITUTE TEXT/;p;x}' text_file
注意您需要将SUBSTITUE TEXT替换为viewers , _viewers或其他
sed命令允许<div class=.entry.>和</dev> ( .允许单个或双引号)之间的所有行不变,如果行以<div class=.entry.>复制到一个寄存器,调用保持空间(HS),然后删除模式空间(PS)。所有其他行被添加到HS,然后删除接受该行</div> 。 HS与PS交换,如果这个多行包含author.>[email protected]则用SUBSTITUTE TEXT代替_toself ,多行被打印出来,然后PS代替HS,然后打印出来。
我们有一些文字
$> cat ./text <div class='entry'> <div class='pageurl'>temp/fhyw1</div> <div class='context'>text</div> <div class='subject'>testing</div> <div class='notetext'></div> <div class='signed'>USER</div> <div class='author'>[email protected]</div> <div class='color'>0</div> <div class='visibility'>shared</div> <div class='to'>_toself</div> <div class='num'>4</div> </div> <div class='entry'> <div class='pageurl'>temp/fhyw1</div> <div class='context'>text</div> <div class='subject'>testing</div> <div class='notetext'></div> <div class='signed'>USER</div> <div class='author'>[email protected]</div> <div class='color'>0</div> <div class='visibility'>shared</div> <div class='to'>_viewers</div> <div class='num'>4</div> </div>
而且我们需要用viewers来替换_toself的价值,但是只能在div中,其中'author'等于[email protected]
我认为sed可以帮助你,但你应该有一些经验,用sed语法来制定所有的条件。
因此,我们可以在while循环中读取文件,只有当作者的值等于某个电子邮件时,才能将其剪切为一个div块,并将其中一个值更改为另一个值。
#!/bin/bash mail="[email protected]" to_value_old=_toself to_value_new=viewers while IFS= read -r line; do if [[ -z "$( echo "$line" | grep -o -P "^</div>$" )" ]]; then entry_block="${entry_block}${line}n" else entry_block="${entry_block}</div>n" entry_block="$( echo -e "${entry_block}" )" if [[ -n "$( echo "${entry_block}" | grep -P "<div class='author'>${mail}</div>" )" ]]; then entry_block="$( echo "${entry_block}" | sed -r -e "s/<div class='to'>${to_value_old}</div>/<div class='to'>${to_value_new}</div>/" )" fi echo "${entry_block}" entry_block="" fi done < ./text
我们得到
$> ./div.sh <div class='entry'> <div class='pageurl'>temp/fhyw1</div> <div class='context'>text</div> <div class='subject'>testing</div> <div class='notetext'></div> <div class='signed'>USER</div> <div class='author'>[email protected]</div> <div class='color'>0</div> <div class='visibility'>shared</div> <div class='to'>viewers</div> <div class='num'>4</div> </div> <div class='entry'> <div class='pageurl'>temp/fhyw1</div> <div class='context'>text</div> <div class='subject'>testing</div> <div class='notetext'></div> <div class='signed'>USER</div> <div class='author'>[email protected]</div> <div class='color'>0</div> <div class='visibility'>shared</div> <div class='to'>_viewers</div> <div class='num'>4</div> </div>
完成。
如果你只想用别的东西代替所有的事情,那么sed就会完成这个工作。
sed 's/_toself/replacement_string/'
如果你只想在指定的author的div内做到这一点,那么它会更棘手一些。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。