SHELL脚本查找指定内容的行号,并删除替换该行

适合文件中只有一个指定字符串的行
原文章:https://blog.51cto.com/wutaoblog/1184819

#!/bin/bash
 
#查找的字符串
str1="string1"
 
#新字符串
newstr="string2"
 
#被替换的文件名
filename="filename"
 
#获取指定字符串的行号
line=`sed -n '/$str1/=' $filename`
 
#删除这行
sed -i "$line d" $filename
 
#在删除的行插入新字符串
sed -i "$line i$newstr" $filename

line=`sed -n '/pam_authenticator.so/=' ${sshd}`
if(($line >0))
then

sed -i "$line d" $sshd

sed -i "$line i $sshd_old" $sshd
### 回答1: 你可以使用 awk 命令来实现这个功能,具体的命令如下: ``` awk '{print NR ":" $}' filename ``` 其中,NR 表示当前行号,$ 表示当前行的内容,":" 是分隔符,filename 是文件名。这个命令会将文件中的每一行都输出,在每一行前面加上该行是第几行的信息。 ### 回答2: 在shell脚本中,可以使用内置变量来实现在输出行前添加行号。我们可以使用一个计数器变量,每次打印一行文本时,使其自增,然后将其与文本一起输出即可。 以下是一个示例的shell脚本代码,以演示如何在输出行前加上该行是第几行: ```bash #!/bin/bash # 初始化计数器变量 line_number=0 # 逐行读取输入文本 while read -r line do # 自增计数器变量 ((line_number++)) # 在输出行前添加行号 echo "第${line_number}行: $line" done ``` 在这个示例中,我们首先初始化一个计数器变量`line_number`为0。然后使用`while read -r line`来逐行读取输入文本。每次读取一行文本时,我们将计数器变量自增,使用`echo`打印出带有行号的行文本。这样就可以在输出行前添加行号了。 注意,上述示例中的输出行号都是从1开始计数的。如果需要从其他数字开始计数,可以在初始化计数器前将其设置为所需的数字。 希望这个回答对您有帮助! ### 回答3: 在shell脚本中,可以使用内置变量$LINENO获取当前行数。我们可以在输出行前加上该行是第几行的方式如下: ```bash #!/bin/bash line_number=1 while read -r line; do echo "第${line_number}行:${line}" ((line_number++)) done < input.txt ``` 在上面的例子中,我们使用一个循环来读取input.txt文件中的每一行。在循环中,我们使用echo语句将每一行输出,使用$line_number变量来表示行数。在每次循环迭代中,我们在输出语句中使用双引号来将行数与行内容连接起来,在行数前加上"第"和"行:"的描述。 注意,上述示例仅针对读取文件中的每一行,在输出行前加上行号。如果要在脚本中直接输出固定的文本行,带有行号,可以根据需要进行修改。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值