GNU/Linux >> Linux の 問題 >  >> Linux

bash / 標準の Linux コマンドのみを使用して、文字列内の一重引用符と二重引用符を削除する

これでうまくいくはずです:

sed "s/^\([\"']\)\(.*\)\1\$/\2/g" in.txt

in.txt の場所:

"Fo'od'
'Food'
"Food"
"Fo"od'
Food
'Food"
"Food'
'Fo'od'
"Fo'od"
Fo'od
'Fo"od'
"Fo"od"
Fo"od

そして expected.txt は:

"Fo'od'
Food
Food
"Fo"od'
Food
'Food"
"Food'
Fo'od
Fo'od
Fo'od
Fo"od
Fo"od
Fo"od

それらが一致することを確認できます:

diff -s <(sed "s/^\([\"']\)\(.*\)\1\$/\2/g" in.txt) expected.txt

tr を使用できます :

echo "$string" | tr -d 'chars to delete' 

...も機能しますが、「tr」は、はるかに古い(Redhat 9程度の)ディストリビューションでは問題があることが知られています。 tr 'translate' の省略形で、入力を変換するためにパイプで一般的に使用されます。 -d オプションは単に「削除」を意味します。

最近のほとんどのバージョンには、上から下へ、下から上へ、空白を削除するなどの定義済みマクロも含まれています。


VAR="'FOOD'"

VAR=$(eval echo $VAR)

説明:引用符はシェルによって既に理解されているため、引用符で囲まれた文字列をエコーするだけのコマンドを評価するようにシェルに依頼できます。これは、自分で入力した場合と同じ方法です。

ここでは、eval echo $VAR eval echo 'FOOD' に展開します 引用符は実際には VAR の値の一部であるため . echo 'FOOD' を実行した場合 FOOD を取得するシェルに (引用符なし)。それが eval です する:入力を受け取り、シェル コマンドのように実行します。

<ブロック引用>

⚠コードインジェクション!

eval スクリプトをコード インジェクションにさらす。

VAR=';ls -l'

VAR=$(eval echo $VAR)

ls -l が実行されます .

はるかに有害なコードがここに挿入される可能性があります。


Linux
  1. 別のコマンドの単一引用符と二重引用符を含むコマンドをラップしますか?

  2. 一重引用符やその他の特殊文字を含む文字列を印刷しますか?

  3. BashスクリプトでのLinuxスリープコマンドの使用

  1. niceおよびreniceコマンドを使用してLinuxプロセスの優先度を設定する方法

  2. 一重引用符と二重引用符の両方を含む bash エイリアス コマンド

  3. Linux のダブル ドット (..) とシングル ドット (.) とは何ですか?

  1. ncおよびpvコマンドを使用して2台のコンピューター間でファイルを転送する方法

  2. Linuxコマンド-概要と例

  3. ランダムを使用してbashでランダムな文字列を生成する