私はまだこれに慣れていません。聞きたいのですが、リバースカットはどうしますか?
はい。
./24feb/frfr
cutコマンド以降の結果は./feb/frfr
。
どうすればいいですか?
答え1
% echo ./24feb/frfr | cut -c 1-2,5-
./feb/frfr
そうだろう駅つまりcut -c 3-4
、すべての文字を出力します(バイト現在のバージョンのGNUと比較すると、cut
3行目と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
使用する必要があります。"