アンダーカットを行う方法は?

アンダーカットを行う方法は?

私はまだこれに慣れていません。聞きたいのですが、リバースカットはどうしますか?

はい。

./24feb/frfr

cutコマンド以降の結果は./feb/frfr

どうすればいいですか?

答え1

% echo ./24feb/frfr | cut -c 1-2,5-
./feb/frfr

そうだろうつまりcut -c 3-4、すべての文字を出力します(バイト現在のバージョンのGNUと比較すると、cut3行目と4行目を除くすべての行です。

GNU実装にはcut次のオプションもあります--complement

cut --complement -c 3-4

10進数の最初のシーケンスを削除するには、次のようにしますsed

sed 's/[0-9]\{1,\}//'

3番目の場所にある場合にのみ削除するには、次の手順を実行します。

sed 's/^\(..\)[0-9]*/\1/'

または、どのパターンが削除をトリガーする必要があるかを明確に説明してください。

sed 's|^\(./\)[0-9]*\([[:lower:]]\{3\}/\)|\1\2|'

これにより、<0-or-more-digits>1行の一致が削除されます./<0-or-more-digits><3-lowercase-letters>/<anything>

答え2

それは不可能です。切断は、フィールド区切り記号の可用性によって異なります。例の必須入力には、フィールド区切り文字として使用できる文字はありません。入力形式をよりよく制御できない場合、せん断は作業に適したツールではありません。これはsedまたはawkを使用して達成できます。たとえば、sedでは次のようになります。

sed 's/[0-9]//g'

答え3

上記の回答に加えて、コマンド置換を使用してそれらを単一のコマンドにまとめて置き換えるcutことができます。sed

この方法は、削除したい名前の文字位置を知っている場合、または問題のある値を見つけることができる場合にのみ機能します。

name="./24feb/frfr"
cut_start=3
cut_end=4

echo "${name}" | sed "s/$(echo "${name}" | cut -c${cut_start}-${cut_end})//"

./2月/frfr

参考までに...一般的に'使用されますが、この場合は拡張コマンドの置き換えを許可するためにsed使用する必要があります。"

関連情報