

検索するとやり方の書かれた記事がたくさん出てくるんですが  
sed が gnu 版かどうかで２パターンあって  
どっちを実行してもうまくいきません

[code]

    sed --version
    gsed (GNU sed) 4.8
    
[/code]

となるので sed は gnu 版みたいなんですが

[code]

    find . -type f | xargs sed -i '' 's/置換前/置換後/g'
    sed: RE error: illegal byte sequence
    
[/code]

[code]

    find . -type f | xargs sed -i 's/置換前/置換後/g'
    sed: 1: "./vars/front.yml": invalid command code .
    
[/code]

となってしまいます

何が悪いんでしょうか

**実行環境**

MAC OS  
zsh  
gnu sed を gsed というバイナリ名でインストールして  
alias で sed という名前にしています


CC BY-SA 4.0
2021-05-17T12:15:39.877
75897
2021-05-18T04:44:42.120
2021-05-18T04:44:42.120
3060
question
zsh sed
サブディレクトリ内のファイル内の文字列を一括置換したい


まず、sed の -i オプションは間違いではないですか？

`find . -type f | xargs sed 's/置換前/置換後/g'`  
は問題ないと思います。

`RE error: illegal byte sequence` は、置換前か置換後の正規表現（RE=Regular
Expression）に誤りがあるのではないかと思います。


CC BY-SA 4.0
2021-05-17T12:31:22.727
75898
2021-05-17T12:31:22.727
45045
75897
answer

[code]

    LANG=C find . -type f | xargs sed -i '' 's/置換前/置換後/g'
    
[/code]

ではいかがでしょうか？`sed: RE error: illegal byte sequence`が出るのは文字コード違いのせいかもしれません。

[code]

    find . -type f | xargs sed -i 's/置換前/置換後/g'
    sed: 1: "./vars/front.yml": invalid command code .
    
[/code]

はsedのiオプションがSUFFIXを要求しているものと思われます。

* * *

こちらの環境では以下で問題なく置換できました。

[code]

    find . -type f | xargs sed -i 's/置換前/置換後/g'
    
[/code]

環境

[code]

    $ cat /etc/os-release
    NAME="Ubuntu"
    VERSION="20.04.2 LTS (Focal Fossa)"
    ID=ubuntu
    ID_LIKE=debian
    PRETTY_NAME="Ubuntu 20.04.2 LTS"
    VERSION_ID="20.04"
    HOME_URL="https://www.ubuntu.com/"
    SUPPORT_URL="https://help.ubuntu.com/"
    BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
    PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
    VERSION_CODENAME=focal
    UBUNTU_CODENAME=focal
    
    $ sed --version
    sed (GNU sed) 4.7
    パッケージ作成者: Debian
    Copyright (C) 2018 Free Software Foundation, Inc.
    License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>.
    This is free software: you are free to change and redistribute it.
    There is NO WARRANTY, to the extent permitted by law.
    
    作者 Jay Fenlason、 Tom Lord、 Ken Pizzini、
    Paolo Bonzini、 Jim Meyering、および Assaf Gordon。
    GNU sed home page: <https://www.gnu.org/software/sed/>.
    General help using GNU software: <https://www.gnu.org/gethelp/>.
    E-mail bug reports to: <bug-sed@gnu.org>.
    
[/code]


CC BY-SA 4.0
2021-05-17T13:56:34.053
75900
2021-05-17T13:56:34.053
35558
75897
answer