teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

改行削除

2017/10/11 11:39

投稿

退会済みユーザー
answer CHANGED
@@ -2,8 +2,7 @@
2
2
 
3
3
  sedならこう。
4
4
  ```bash
5
- sed -n '/^<aaa>$/,/^</xxx>$/p' hoge.txt | sed -e 's/^<aaa>$/<bbb>/g' -e 's/^</xxx>$/</zzz>/g'
5
+ sed -n '/^<aaa>$/,/^</xxx>$/p' hoge.txt | sed -e 's/^<aaa>$/<bbb>/g' -e 's/^</xxx>$/</zzz>/g' > hogehoge.txt
6
- > hogehoge.txt
7
6
  ```
8
7
  ---
9
8
 

1

perl追記

2017/10/11 11:39

投稿

退会済みユーザー
answer CHANGED
@@ -1,4 +1,37 @@
1
1
  perlでないとだめでしょうか。
2
+
3
+ sedならこう。
4
+ ```bash
5
+ sed -n '/^<aaa>$/,/^</xxx>$/p' hoge.txt | sed -e 's/^<aaa>$/<bbb>/g' -e 's/^</xxx>$/</zzz>/g'
6
+ > hogehoge.txt
2
7
  ```
8
+ ---
9
+
10
+ perlならこうでしょうか。
11
+ ```perl
12
+ #!/usr/bin/perl
13
+
14
+ use utf8;
15
+ use strict;
16
+
17
+ open(IN,"<","hoge.txt");
18
+
19
+ open(OUT,">>","hogehoge.txt")or die"error:$!";
20
+
21
+ my $text = '';
22
+ while (my $line = <IN>) {
23
+ $text .= $line;
24
+ }
25
+
26
+ while($text =~ /<aaa>.*?</xxx>/s){
27
+ my $tmp = $&;
28
+ my $match = $&;
29
+ $match =~ s/^<aaa>$/<bbb>/m;
3
- sed -n '/^<aaa>$/,/^</xxx>$/p' hoge.txt > hogehoge.txt
30
+ $match =~ s/^</xxx>$/</zzz>\n/m;
31
+ print OUT $match;
32
+ $text =~ s/$tmp//s;
33
+ }
34
+
35
+ close(IN);
36
+ close(OUT);
4
37
  ```