shell编程中怎么对文本操作

比如一个有n行的文本文件
1.删除某一行用什么命令。
2.用已知的内容替换文件中的一行。
3.还有重定向只有>>和>这两种是吗?看看看的头都大了。~~~
补充一下第一个问题:
删除之后不能有空行,即删除前:1:asd 2:asdasd 3:asd
删除后不能是:1:asd 2: 3:asd
必须是1:asd 2:asd。不知道这么讲清不清楚

对了还有一个问题,grep命令用什么参数可以让他在只指定的行中进行匹配。比如我想让他在第3行中匹配该怎么弄,能用grep最好,实在不行用那个什么sed,awk的也行。谢谢大家

cat test.txt
asd
asdasd
asd

sed -i '/asdasd/d' test.txt 删除匹配asdasd 的行,其中asdasd 为匹配内容 test.txt 为文件名
sed -i '2d' test.txt 删除第2行

指定行匹配
第二行中 匹配 asdasd

sed -n '2p' test.txt |sed -n '/asdasd/p'

head -2 test.txt |tail -1|sed -n '/asdasd/p'

awk 'NR==2' test.txt|sed -n '/asdasd/p'

awk 'NR==2{if($0~asdasd)print}' test.txt追问

sed -n '2p' test.txt |sed -n '/asdasd/p'head -2 test.txt |tail -1|sed -n '/asdasd/p'这几行是什么意思,能不能解释下。我知道d是删除,a是添加好像,那P是什么呢?

追答

首先每一行都是一种方法,
你的两行放一起了,
小写p 是打印的意思
sed -n '2p' test.txt |sed -n '/asdasd/p'
解释:

1、-n 是不打印原文件内容
2、 sed -n '2p' test.txt 打印第二行
3、| 管道符 (功能 前面的输出内容做为后面的输入内容)

4、sed -n '/asdasd/p' 匹配asdasd打印

head -2 test.txt |tail -1|sed -n '/asdasd/p'

1、head -2 test.txt 打印前两行
2、tail -1 前两行中 取倒数第一行 (等于取第二行)
3、同上, 匹配asdasd打印

拓展说明:sed 中还有一个大写的P参数 用于空间模式(多行匹配)
自己可以去了解一下 sed多行模式空间的N P D操作

追问

我试了下,文件内容没有发生变化。其实我在做课程设计,shell通讯录,记录都放在一个文件中。现在不会弄修改操作。比如接收3个变量,name,phonenumber,QQ,然后把这3个变量写入记录文件。(到这我都会)然后需要修改了,再接收3个变量写入,覆盖第一次写入的位置。主要是这个不会,能劳烦这位网友讲下吗?添加删除查询都弄好了,就差这个修改操作。
例子:第n行数据:Allen 123 456,接收3个变量覆盖第n行原有的数据。

追答

cat test.txt
Andy 123 456
Ben 124 457
Allen 123 456
Zak 234 393

cat alter-by-line.sh
#!/bin/sh
sed -i -e "3a$1 $2 $3" -e "3d" test.txt

第三行后添加 接收的数据 $1 ~ $3 分别表示 脚本后面的 第一个参数 ~第三个参数

删除原有第三行

sh alter-by-line.sh Aimer 124 454 #执行脚本

cat test.txt
Andy 123 456
Ben 124 457
Aimer 124 454

Zak 234 393

追问

。。。额。。。我一开始想的修改就是用先删除后添加的办法,觉得太土了。不过非常感谢你

温馨提示:答案为网友推荐,仅供参考
相似回答