首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >编写shell脚本

编写shell脚本
EN

Stack Overflow用户
提问于 2013-03-20 03:47:48
回答 2查看 101关注 0票数 2

我想写一个shell脚本,它将从标准输入读取文件,删除所有字符串和空行字符,并将输出写入标准输出。该文件如下所示:

代码语言:javascript
复制
#some lines that do not contain <html> in here
<html>a<html>
<tr><html>b</html></tr>
#some lines that do not contain <html> in here
<html>c</html>

因此,输出文件应该包含:

代码语言:javascript
复制
#some lines that do not contain <html> in here
a
<tr>b</html></tr>
#some lines that do not contain <html> in here
c</html>

我试着写这个shell脚本:

代码语言:javascript
复制
read INPUT #read file from std input
tr -d '[:blank:]'
grep "<html>" | sed -r 's/<html>//g'
echo $INPUT

然而,这个脚本根本不起作用。有什么想法吗?thx

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-03-20 04:03:10

纯bash:

代码语言:javascript
复制
#!/bin/bash

while read line
do
    #ignore comments
    [[ "$line" = "\#" ]] && continue
    #ignore empty lines
    [[ $line =~ ^$ ]] && continue
    echo ${line//\<html\>/}
done < $1

输出:

代码语言:javascript
复制
$ ./replace.sh input
#some lines that do not contain in here
a
<tr>b</html></tr>
#some lines that do not contain in here
c</html>

纯sed:

代码语言:javascript
复制
sed -e :a -e '/^[^#]/N; s/<html>//; ta' input | sed '/^$/d'
票数 1
EN

Stack Overflow用户

发布于 2013-03-20 03:54:48

Awk可以轻松做到这一点:

代码语言:javascript
复制
awk '/./ {gsub("<html>","");print}' INPUTFILE

首先,它对至少包含一个字符的每一行进行操作(因此空行将被丢弃),并将该行上的"<html>“全局替换为一个空字符串,然后打印出来。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15509058

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档