小编gue*_*t_7的帖子

替换每行中第 n 个从结尾出现的字符串

使用 sed,如何在给定文件的每一行中替换第 N 个到最后一个字符?

在这种情况下,我想更换3到最后;,

输入

1;2;3;4;5;6;7;8;9
10;20;30;40;50;60;70;80;90
100;200;300;400;500;600;700;800;900
Run Code Online (Sandbox Code Playgroud)

预期产出

1;2;3;4;5;6,7;8;9
10;20;30;40;50;60,70;80;90
100;200;300;400;500;600,700;800;900
Run Code Online (Sandbox Code Playgroud)

我知道我可以像这样替换第 6 次出现

sed 's/;/,/6' input_file.csv > output_file.csv
Run Code Online (Sandbox Code Playgroud)

或者最后一个

sed -r 's/(.*);/\1,/' input_file.csv > output_file.csv
Run Code Online (Sandbox Code Playgroud)

但在我的特殊情况下,由于一些细微差别,我需要从最后开始。

我试过类似的东西

sed -r 's/(.*);/\1,/3' input_file.csv > output_file.csv
Run Code Online (Sandbox Code Playgroud)

debian sed text-processing

9
推荐指数
4
解决办法
814
查看次数

用开始和结束模式连接多行

我有一个这样的文件:

method AAA one (1,111):
   some_text_1
method BBB two (2,
   222):
   tuesday
method CCC three (3,
    333):
   sunny_day
method DDD four (4,
    444_a,
    444_b):
   last_week
Run Code Online (Sandbox Code Playgroud)

我希望它看起来像这样:

method AAA one (1,111):
   some_text_1
method BBB two (2,222):
   tuesday
method CCC three (3,333):
   sunny_day
method DDD four (4,444_a,444_b):
   last_week
Run Code Online (Sandbox Code Playgroud)

我有这个 sed 命令几乎可以做到:

sed -i '/method/,/):/ p; :a; N; $!b a; s/\n\s\{1,\}//g' file.txt
Run Code Online (Sandbox Code Playgroud)

它给出了这个输出:

method AAA one (1,111):
method AAA one (1,111):some_text_1
method BBB two (2,222):tuesday
method CCC three (3,333):sunny_day
method DDD four (4,444_a,444_b): …
Run Code Online (Sandbox Code Playgroud)

sed shell-script

7
推荐指数
1
解决办法
418
查看次数

从 Nginx conf 中提取服务器的块和值

我们如何使用 AWK 提取 nginx 服务器块?输入

server { # php/fastcgi
listen       80;
server_name  domain1.com www.domain1.com;
access_log   logs/domain1.access.log  main;
root         html;

location ~ \.php$ {
  fastcgi_pass   127.0.0.1:1025;
}
}
server { # simple reverse-proxy
listen       80;
server_name  domain2.com www.domain2.com;
access_log   logs/domain2.access.log  main;

# serve static files
location ~ ^/(images|javascript|js|css|flash|media|static)/  {
  root    /var/www/virtual/big.server.com/htdocs;
  expires 30d;
}

# pass requests for dynamic content to rails/turbogears/zope, et al
location / {
  proxy_pass      http://127.0.0.1:8080;
}
}
Run Code Online (Sandbox Code Playgroud)

我们如何匹配所需的值并为每个 server{} 块打印一行?

例如

我需要获取listen|root|server_name 的值。所需的输出是

80 domain1.com www.domain1.com html …
Run Code Online (Sandbox Code Playgroud)

awk text-processing nginx

5
推荐指数
1
解决办法
192
查看次数

标签 统计

sed ×2

text-processing ×2

awk ×1

debian ×1

nginx ×1

shell-script ×1