删除指定单词第一次出现之前的所有内容

删除指定单词第一次出现之前的所有内容

如何使用 删除指定单词第一次出现之前的所有内容sed

到目前为止我已经尝试过:

echo $(cat /etc/nginx/sites-enabled/default | sed 's/^*.server/server/') > /etc/nginx/sites-enabled/default

我需要清理所有垃圾,然后才能找到第一个“服务器”单词。

我主要需要一个sed正则表达式......

我有一个包含代理信息的 Nginx 默认文件,当脚本将其复制到 Docker 容器时,该文件的前导空格会增多,因此无法启动。我需要使用一些命令将其删除。

文件:

       server
{
listen 80 default_server;
location / 
{
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Connection "";
proxy_http_version 1.1;
proxy_pass http://127.0.0.1:5000;
}
}

我不确定那里有什么样的字符,所以我想删除“服务器”之前的所有内容。

答案1

您只需使用以下简单命令删除行首和单词“server”之间的每个空格字符(制表符、空格等)(仅当除了空格之外没有其他内容时):

sed -i 's/^\s*server/server/' FILENAME

-i选项会就地修改文件,这意味着所有更改都会立即应用并保存,并且您不会获得任何输出。如果您不想重写文件并查看修改后的新版本,请省略该-i选项,命令会将其打印到 STDOUT(标准输出流)。

我使用正则表达式^\s*server来匹配行首和单词“server”之间(包括)的任意数量的任何类型的空格,并让它用单词“server”本身替换这些匹配项。

答案2

GNU sed 具有一种特殊形式的范围地址0,/pattern/,可让您仅匹配pattern文件中第一次出现的地址,例如

sed '0,/server/ s/^.*server/server/' /etc/nginx/sites-enabled/default

或者(也许更好,因为它将匹配也锚定到行首)

sed '0,/^.*server/ s//server/' /etc/nginx/sites-enabled/default


在添加-i(就地)标志和/或使用备份之前,请先尝试一下-i.bak

相关内容