4

如何识别以特殊模式开头的行并在行尾添加一些内容?

如果应该添加的模式尚未附加

假设我想在主机文件中找到特定行,或者通过开头的模式可能是一个 ip 地址,或者通过该行上方的注释

一个例子可能是:

#This is your hosts file

127.0.0.1 localhost linux 

#This is added automatically 

192.168.1.2 domain1. com 

#this is added automatically to 

192.168.1.2 sub.domain1.com www.domain1.com

当你找到我告诉你的 IP 时,我如何告诉 bash。去 ro 行结束并添加一些东西

或其他情况

当 bash 找到评论时#This is added automatically

下降 2,然后走到行尾并添加一些东西

你看我是一个初学者,不知道在这里使用什么以及如何使用。dis是sed完成的吗?或者这可以用grep来完成吗?我必须为那些东西学习AWK吗?

4

3 回答 3

9

这将使用模式“127.0.0.1”在行尾添加一些文本。

grep -F "127.0.0.1" file | sed -ie 's/$/& ADDing SOME MORE TEXT AT THE END/g'

以下将添加到文件中以127.0.0.1via sed 开头的行:

sed -ie 's/^127.0.0.1.*$/& ADDing MORE TEXT TO THE END/g' file

为此,您还可以使用awk

awk '/^127.0.0.1/{print $0,"ADD MORE TEXT"}' file > newfile && mv newfile file
  • 编辑

如果您想通过变量调用 IP 地址,则语法可能会有所不同:

var="127.0.0.1"
grep -F "$var" file | sed -ie 's/$/& ADD MORE TEXT/g'
sed -ie "s/^$var.*$/& ADD MORE TEXT/g" file
awk '/^'$var'/{print $0,"ADD MORE TEXT"}' file > newfile && mv newfile file
于 2013-09-18T16:54:28.207 回答
3

鉴于以下情况:

文本文件:

[root@yourserver ~]# cat text.log 
#This is your hosts file

127.0.0.1 localhost linux 
[root@yourserver ~]# 

bash脚本:

[root@yourserver ~]# cat so.sh 
#!/bin/bash

_IP_TO_FIND="$1"

# sysadmin 101 - the sed command below will backup the file just in case you need to revert

_BEST_PATH_LINE_NUMBER=$(grep -n "${_IP_TO_FIND}" text.log | head -1 | cut -d: -f1)
_LINE_TO_EDIT=$(($_BEST_PATH_LINE_NUMBER+2))
_TOTAL_LINES=$( wc -l text.log)
if [[ $_LINE_TO_EDIT -gte $_TOTAL_LINES ]]; then
   # if the line we want to add this to is greater than the size of the file, append it
  sed -i .bak "a\${_LINE_TO_EDIT}i#This is added automatically\n\n192.168.1.2 domain1. com" text.log
else
  # else insert it directly 
  sed -i .bak "${_LINE_TO_EDIT}i\#This is added automatically\n\n192.168.1.2 domain1. com" text.log
fi

用法:

bash ./so.sh 127.0.0.1

只需输入您要查找的 IP 地址,此脚本在第一次出现时匹配。

希望这可以帮助!

于 2013-09-18T16:51:12.383 回答
1

这个内联 sed 应该可以工作:

sed -i.bak 's/^192\.168\.1\.2.*$/& ADDED/' hosts 
  1. 此 sed 命令查找以192.168.1.2
  2. 如果找到它会ADDED在这些行的末尾添加
于 2013-09-18T16:55:39.260 回答