awk
/sed
を使用して文字列の最初と最後の文字を削除するのは簡単ですか?文字列の最後と最初の文字を取り除く
は、私はそれから括弧を除去したいと思い、この文字列 (1 2 3 4 5 6 7)
を持っていると言います。
どうすればよいですか?
awk
/sed
を使用して文字列の最初と最後の文字を削除するのは簡単ですか?文字列の最後と最初の文字を取り除く
は、私はそれから括弧を除去したいと思い、この文字列 (1 2 3 4 5 6 7)
を持っていると言います。
どうすればよいですか?
SED方法
$ echo '(1 2 3 4 5 6 7)' | sed 's/^.\(.*\).$/\1/'
1 2 3 4 5 6 7
awkの道
$ echo '(1 2 3 4 5 6 7)' | awk '{print substr($0, 2, length($0) - 2)}'
1 2 3 4 5 6 7
POSIX shの道
$ var='(1 2 3 4 5 6 7)'; var="${var#?}"; var="${var%?}"; echo "$var"
1 2 3 4 5 6 7
、bashの道
$ var='(1 2 3 4 5 6 7)'; echo "${var:1: -1}"
1 2 3 4 5 6 7
bash
を使用する場合は、bash形式を使用してください。
そうでない場合は、posix-sh方法をお勧めします。それは、sed
またはawk
の読み込みよりも速いです。
これ以外にも、他のテキスト処理を行っている可能性があります。これは他のスクリプトによっては、最後にsed
またはawk
を使用すると効果があります。
なぜこの仕事をしますか?
sed '..' s_res.temp > s_res.temp
?
これは、それが読み込まれる前にファイルが切り捨てられますリダイレクト>
として、動作しません。あなたには、いくつかの選択肢があり、これを解決するために :あなたが本当にやりたいこと
は編集ファイルです。 sed
はストリームエディタであり、ファイルエディタではありません。
ed
しかし、ファイルエディタ(標準もそうです!)です。だから、ed
を使用します。
$ printf '%s\n' "%s/^.\(.*\).$/\1/" "." "wq" | ed s_res.temp
は、古いものを置き換えるために、それを一時ファイルを使用して、mv
。
$ sed 's/^.\(.*\).$/\1/' s_res.temp > s_res.temp.temp
$ mv s_res.temp.temp s_res.temp
sed
の-i
オプションを使用します。
$ sed -i 's/^.\(.*\).$/\1/' s_res.temp
虐待シェル(実際にはお勧めしません):
$ (rm test; sed 's/XXX/printf/' > test) < test
-i
がない POSIXとGNU-のみであるとして、これは、GNU-のsedで動作しますMac OS X(最新バージョン10.12 - Sierra)bash
はかなり古いバージョン3.2.57
に固執しています。 brew
を使用して常にbash
をインストールし、上記の動作に必要な置換を含むバージョン4.x
を得ることができます。
もperlの途中でコンパイルしたbashのバージョンとそれぞれの変化のコレクションがあります:指定した文字列から最初と最後の文字を削除するには
perl -pe 's/^.|.$//g'
が、私は好きこのsed
:
sed -e 's/^.//' -e 's/.$//'
# ^^ ^^
# first char last char
例を参照してください:
sed -e 's/^.//' -e 's/.$//' <<< "(1 2 3 4 5 6 7)"
1 2 3 4 5 6 7
恐ろしい!どうもありがとう!!!!! – user1508893
私は 'sed'を使いたいです。 1つの質問、なぜ、これは動作しませんか? 'sed 's/^。\(。* \)。$/\ 1 /' s_res.temp> s_res.temp'? – user1508893
リダイレクトはファイルを読み込む前に切り捨てるためです。私はこれについて私の答えを更新します。 – c00kiemon5ter