回答編集履歴

2

不備修正

2017/11/07 13:59

投稿

KojiDoi
KojiDoi

スコア13671

test CHANGED
@@ -20,7 +20,9 @@
20
20
 
21
21
  for a in *
22
22
 
23
+ cp $a $a.bak
24
+
23
- do sed -r -e "s/<([^>]+?):(.*)>/<\1_\2>/g"
25
+ do sed -r -e "s/<([^>]+?):(.*)>/<\1_\2>/g" $a.bak > $a # 追記。ファイルの置きかえになっていなかったので
24
26
 
25
27
  done
26
28
 

1

ディレクトリ内すべてのファイルに行う方法

2017/11/07 13:59

投稿

KojiDoi
KojiDoi

スコア13671

test CHANGED
@@ -9,3 +9,31 @@
9
9
  $ echo '<a:b>'|sed -e "s/<([^>]*):(.*)>/<\1_\2>/g"
10
10
 
11
11
  ```
12
+
13
+ > 同様の処理をディレクトリ内すべてのファイルに行う方法
14
+
15
+
16
+
17
+ bashなら、
18
+
19
+ ```
20
+
21
+ for a in *
22
+
23
+ do sed -r -e "s/<([^>]+?):(.*)>/<\1_\2>/g"
24
+
25
+ done
26
+
27
+ ```
28
+
29
+
30
+
31
+ perlを使う手もあります。
32
+
33
+ 以下をコマンドラインで実行すると、カレントディレクトリの全ファイルで書きかえが実行され、元データは.bakの付いたファイルにバックアップされます。
34
+
35
+ ```
36
+
37
+ perl -i.bak -pe "s/<([^>]+?):(.*)>/<\1_\2>/g" *
38
+
39
+ ```