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

回答編集履歴

2

不備修正

2017/11/07 13:59

投稿

KojiDoi
KojiDoi

スコア13727

answer CHANGED
@@ -9,7 +9,8 @@
9
9
  bashなら、
10
10
  ```
11
11
  for a in *
12
+ cp $a $a.bak
12
- do sed -r -e "s/<([^>]+?):(.*)>/<\1_\2>/g"
13
+ do sed -r -e "s/<([^>]+?):(.*)>/<\1_\2>/g" $a.bak > $a # 追記。ファイルの置きかえになっていなかったので
13
14
  done
14
15
  ```
15
16
 

1

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

2017/11/07 13:59

投稿

KojiDoi
KojiDoi

スコア13727

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