タグ付けされた質問 「string」

文字列操作:文字列の一部の抽出、テキストの置換、特定の幅へのフォーマットなど

2
BashとZsh以外のシェルはANSI-Cクォートをサポートしていますか?例:$ 'string'
出力に緑色のチェックマークを出力するために次を使用するシェルスクリプトがあります。 col_green="\e[32;01m" col_reset="\e[39;49;00m" echo -e "Done ${col_green}✓${col_reset}" BashのANSI-C Quotingについて読んだ後、色変数を設定-eし、echoからフラグを削除するときに使用できることに気付きました。 col_green=$'\e[32;01m' col_reset=$'\e[39;49;00m' echo "Done ${col_green}✓${col_reset}" これは、Bashの組み込みエコーまたは外部ユーティリティ/bin/echo(私はmacOS上にある)に渡されたメッセージが正しく印刷されることを意味するため、魅力的です。 しかし、これによりスクリプトの移植性が低下しますか?BashとZshがこのスタイルの引用をサポートしていることは知っていますが、他のことについてはわかりません。

4
文字列置換:すべての出現
簡単な質問ですが、答えが見つかりません。zshのドキュメントは私を圧倒します:-( function z () { echo ${1:s/the/THE} } $ z thethethe THEthethe ... 最初の出現だけでなく、すべての「the」を「THE」に置き換えるにはどうすればよいですか?zshでは、例を見つけるのが最も難しいと思われる最も簡単な方法です。
13 zsh  string 


6
文字列の末尾の空白を別の文字で埋める
hello world20文字以上出力したいです。 printf "%-20s :\n\n" 'hello world!!' # Actual output hello world!! : # Wanted output hello world!!========: ただし、スペースで補完するのではなく、代わりに「=」で補完します。それ、どうやったら出来るの?
12 bash  shell  string  printf 

3
sedまたはawkを再度呼び出さずに、文字列からドット文字を削除するにはどうすればよいですか?
次のhostlist.txtようなテキストを含むというファイルがあります。 host1.mydomain.com host2.mydomain.com anotherhost www.mydomain.com login.mydomain.com somehost host3.mydomain.com 次の小さなスクリプトがあります。 #!/usr/local/bin/bash while read host; do dig +search @ns1.mydomain.com $host ALL \ | sed -n '/;; ANSWER SECTION:/{n;p;}'; done <hostlist.txt \ | gawk '{print $1","$NF}' >fqdn-ip.csv 出力先fqdn-ip.csv: host1.mydomain.com.,10.0.0.1 host2.mydomain.com.,10.0.0.2 anotherhost.internal.mydomain.com.,10.0.0.11 www.mydomain.com.,10.0.0.10 login.mydomain.com.,10.0.0.12 somehost.internal.mydomain.com.,10.0.0.13 host3.mydomain.com.,10.0.0.3 私の質問は.、コンマの直前を削除せずにsed、gawk再度呼び出すことはできませんか?ドットを取り除く既存の呼び出しsedまたはgawk呼び出しで実行できるステップはありますか? hostlist.txt 数千のホストが含まれるので、スクリプトを高速かつ効率的にしたいです。


1
いつ実行可能バイナリの文字列を編集できますか?
実行可能なバイナリがあります。それを呼び出しましょうa.out。バイナリに文字列が含まれていることがわかります $ strings a.out ... /usr/share/foo .... 文字列/usr/share/fooをに変更する必要があります/usr/share/bar。文字列をsed?に置き換えることはできますか? sed -i 's@/usr/share/foo@/usr/share/bar@' a.out これは安全なことのように見えます。これは、文字列が同じ長さでない場合にも機能しますか?

5
シェルコマンドの出力の文字数
コマンドの出力の文字数を1ステップで計算する必要があるスクリプトを書いています。 たとえば、コマンドの出力は10文字なので、コマンドを使用するreadlink -f /etc/fstabと戻り10ます。 これは、次のコードを使用して、格納された変数ですでに可能です。 variable="somestring"; echo ${#variable}; # 10 残念ながら、コマンドで生成された文字列で同じ数式を使用しても機能しません。 ${#(readlink -f /etc/fstab)}; # bash: ${#(readlink -f /etc/fstab)}: bad substitution 私は最初に出力を変数に保存することでこれを行うことが可能であることを理解しています: variable=$(readlink -f /etc/fstab); echo ${#variable}; しかし、私は余分なステップを削除したいと思います。 これは可能ですか?組み込みまたは標準のユーティリティのみを使用したAlmquistシェル(sh)との互換性が推奨されます。
12 shell  string  variable 



3
文字列からBashの「単語」の配列に移動する
文字列から、各エントリがその文字列の各単語である配列に移動する必要があります。たとえば、次のように始まります: VotePedro="Vote for Pedro" 配列が必要です: Vote For Pedro 次に私は次のように反復できるはずです: for i in "${votePedroArray[@]}" do ## Do something done

3
1回のパスで複数の文字列を置き換える
テンプレートファイルのプレースホルダー文字列を、一般的なUnixツール(bash、sed、awk、perlなど)で具体的な値に置き換える方法を探しています。交換が1回のパスで行われることが重要です。つまり、すでにスキャン/交換されたものを別の交換と見なしてはなりません。たとえば、次の2つの試みは失敗します。 echo "AB" | awk '{gsub("A","B");gsub("B","A");print}' >> AA echo "AB" | sed 's/A/B/g;s/B/A/g' >> AA この場合の正しい結果はもちろんBAです。 一般に、ソリューションは、入力を左から右にスキャンして、指定された置換文字列の1つとの最長一致を検索し、各一致について置換を実行して、入力のそのポイントから続行することと同等でなければなりません(すでに読み込まれた入力も、実行された置換も一致と見なされます)。実際、詳細は関係ありません。置換の結果が全体または一部が別の置換の対象になることはありません。 注私は正しい一般的なソリューションのみを探しています。特定の入力(入力ファイル、検索および置換ペア)で失敗するソリューションを提案しないでください。
11 bash  sed  awk  string  replace 

4
bashで2つの文字列の重複を見つけるにはどうすればよいですか?[閉まっている]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Unix&Linux Stack Exchangeのトピックとなるようにしてください。 5年前に閉鎖されました。 弦が2本あります。例として、これらは次のように設定されています。 string1="test toast" string2="test test" 私が欲しいのは、弦の始めから始まるオーバーラップを見つけることです。オーバーラップとは、上記の例では文字列「test t」を意味します。 # I look for the command command "$string1" "$string2" # that outputs: "test t" 文字列であった場合、string1="atest toast"; string2="test test"チェックは最初から始まり、「a」はの最初から始まるため、文字列は重複しませんstring1。



弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.