タグ付けされた質問 「text-processing」

プログラム、スクリプトなどによるテキストの操作または検査

1
ksh93はとても高速ですか?
そのため、一般的に、私はsedテキスト処理、特に大きなファイルを探す傾向があり、通常はシェル自体でそのようなことを行うのを避けます。 しかし、それは変わるかもしれないと思います。私はあちこち見ていてman ksh、これに気づきました: <#pattern Seeks forward to the beginning of the next line containing pattern. <##pattern The same as <# except that the por‐ tion of the file that is skipped is copied to standard output. 実世界の有用性に懐疑的だったので、試してみることにしました。やった: seq -s'foo bar ' 1000000 >file ...次のような100万行のデータの場合: 1foo bar ... 999999foo bar 1000000 …

5
文字列を検索し、範囲内の前後のすべてを出力します
私はこのファイルを持っています: sometext1{ string1 } sometext2{ string2 string3 } sometext3{ string4 string5 string6 } このファイルで特定の文字列を検索し、この文字列の前から始まりまで、{およびこの文字列の後から終わりまでのすべてを印刷します}。私はsedでこれを達成しようとしましたが/{/,/string2/、たとえばsedでこの範囲のすべてを印刷しようとすると、次のように印刷されます。 sometext1{ string1 } sometext2{ string2 sometext3{ string4 string5 string6 } 文字列「string2」を検索すると、次のような出力が必要です。 sometext2{ string2 string3 } ありがとう。

8
前の行に行を追加する方法は?
解析と分析が必要なログファイルがあります。ファイルには、次のようなものが含まれています。 ファイル: 20141101 server contain dump 20141101 server contain nothing {uekdmsam ikdas jwdjamc ksadkek} ssfjddkc * kdlsdl sddsfd jfkdfk 20141101 server contain dump 上記のシナリオに基づいて、開始行に日付または前の行に追加する必要がある数値が含まれていないかどうかを確認する必要があります。 出力ファイル: 20141101 server contain dump 20141101 server contain nothing {uekdmsam ikdas jwdjamc ksadkek} ssfjddkc * kdlsdl sddsfd jfkdfk 20141101 server contain dump

8
行の最初または途中のパターンのGrep
まず、この問題は思ったよりも無害だと思います。 私が必要なこと:PATH環境変数内のフォルダーを確認します。それは最初か後のどこかにあります。そのフォルダが存在することを確認するだけです。 私の問題の例-使用しましょう/opt/gnome。 シナリオ1:フォルダーがPATHの先頭にない # echo "$PATH" /sbin:/usr/sbin:/opt/gnome:/var/opt/gnome # echo "$PATH" | grep ":/opt/gnome" /sbin:/usr/sbin:/opt/gnome:/var/opt/gnome キャッチしないように、grepは十分に具体的である必要があることに注意してください/var/opt/gnome。したがって、結腸。 シナリオ2:フォルダーがPATHの先頭にあります。 # echo "$PATH" /opt/gnome:/sbin:/usr/sbin:/var/opt/gnome # echo "$PATH" | grep "^/opt/gnome" /opt/gnome:/sbin:/usr/sbin:/var/opt/gnome これは私の問題です-このフォルダーでコロンまたは行頭を検索する必要があります。私がやりたいのは、次の2つのブラケット式の1つです。 # echo $PATH | grep "[^:]/opt/gnome" # echo $PATH | grep "[:^]/opt/gnome" しかし[^と[:、自分の意味を持っています。したがって、上記の2つのコマンドは機能しません。 1つのコマンドでこれらの2つのシナリオをgrepできる方法はありますか?

2
複数行のテキストファイル内のネストされた中括弧の間のすべてのテキストを削除するにはどうすればよいですか?
この質問は、複数行のテキストファイルで、中かっこの間のすべてのテキストを削除するには どうすればよいですか。(まったく同じですが、ネストの要件はありません)。 例: This is { {the multiline text} file } that wants { to {be changed} } anyway. になるはずです: This is that wants anyway. ある種の1行のbashコマンド(awk、sed、perl、grep、cut、tr ...など)でこれを行うことは可能ですか?

1
sedのN番目から最後の行以外をすべて印刷するにはどうすればよいですか?
の補完/反対をしたい sed 13q;d <file.txt より一般的には、この種の補数/逆数/逆数をこのようにすることは可能sedですか?または正規表現のみですか? 最後から3行目以外のすべてを印刷するにはどうすればよいですか。これには2 tacの値が必要であり、それを数える必要がありsedますか?それともsed、後ろから数える方法はありますか?


2
文字列を順次インデックスに置き換えます
誰かがこれを達成するためのエレガントな方法を提案できますか? 入力: test instant () test instant () ... test instant () //total 1000 lines 出力は次のようになります。 test instant1 () test instant2 () test instant1000() 空の行が入力ファイルにあり、同じディレクトリの下に一度に処理する必要のあるファイルがたくさんあります。 同じディレクトリ内の多くのファイルを置き換えるためにこれを試してみましたが、機能しませんでした。 for file in ./*; do perl -i -000pe 's/instance$& . ++$n/ge' "$file"; done エラー: Substitution replacement not terminated at -e line 1. Substitution replacement …

3
貼り付けコマンド:(複数の)区切り文字の設定
Linuxでは、paste(GNU coreutils)8.13 以降に次の問題があります。 デフォルト(TAB)以外の区切り文字を設定しようとすると、定義された区切り文字の最初の文字が出力されるか、完全に無視されます。 質問:使用時に(複数の)区切り文字をどのように定義し pasteますか? 単に、例えば、abc-123を区切り文字として使用するのが良いでしょう。「複数」とは、たとえば1つではなく2つのTABSを意味します。 これまでに試した区切り文字を囲むパターンは --delimiters="\delimiter" --delimiters='\delimiter' --delimiters=$"\delimiter" --delimiters=$'\delimiter' すべて同じ結果:最初の文字のみが受け入れられるか、完全に無視されます。短いバージョン-d"\"と複数のインスタンスも試しました&ndahs; 何も。 また: --delimiters="\\" →エラーメッセージ 私が望むものではありませんが、完璧に機能するもの: --delimiters="\n" →改行 --delimiters="\0" →間に何もない --delimiters="\t"→ TAB、デフォルト。すごい。

7
最後のx個の出現を除く文字を置き換えます
次のようなIPに関連付けられた一連のホスト名を持つファイルがあります。 x-cluster-front-1 192.168.1.2 x-cluster-front-2 192.158.1.10 y-cluster-back-1 10.1.11.99 y-cluster-back-2 10.1.157.38 int.test.example.com 59.2.86.3 super.awesome.machine 123.234.15.6 次のようにしたい: x-cluster-front-1 192.168.1.2 x-cluster-front-2 192.158.1.10 y-cluster-back-1 10.1.11.99 y-cluster-back-2 10.1.157.38 int-test-example-com 59.2.86.3 super-awesome-machine 123.234.15.6 どうすれば交換できますか?(ドット)最初の列から-(ハイフン)を付けて、2番目の列によるソートを容易にしますか?最初のスペースまでsedを使用してドットを置き換えるか、最後の3つを除くすべてのドットを置き換えることを考えていましたが、正規表現とsedを理解できません。単純な置換を実行できますが、これは私の頭の上の方法です! これは、私がbashで書いている大きなスクリプトの一部です。この部分で行き詰まっています。

2
awkを使用して2つのファイルを処理する
UnixとAwkを使用した2つのファイルの比較を読みました。本当に面白いです。私はそれを読んでテストしましたが、完全に理解することはできず、他の場合にそれを使用します。 2つのファイルがあります。file11つのフィールドがあり、もう1つのフィールドには16フィールドがあります。1の要素を読み取りfile、それらをの3番目のフィールドと比較したいfile2。各要素が一致した場合、フィールド5の値を合計しますfile2。例として: ファイル1 1 2 3 ファイル2 2 2 2 1 2 3 6 1 2 4 4 1 1 2 3 6 3 3 3 4 要素1の場合、フィールド3の値が1 file1であるフィールド5に値を追加しますfile2。そして、要素2と3にも同じことを行いfile1ます。1の出力は(3 + 4 = 7)で、2の出力は2、3の出力は4です。 どのようにawkで書けばよいかわかりません。


5
シェルスクリプトで2番目のファイルを最初の列と比較し、2番目のファイルから重複行を削除する
例を挙げて質問します。2つのファイルがあります。 ファイル#1: 118D FC300_R5_TP FX.B 32775 2112 6 2038 6 2112 0 118E FC300_R5_TP FX.B 32775 2136 7 2065 6 2136 0 118F FC300_R5_TP FX.B 32775 2124 6 2064 6 2124 0 1190 FC300_R5_TP FX.B 819210 814632 99 814609 99 814632 0 1191 FC300_R5_TP FX.B 819210 104100 13 103714 13 …

5
一意の識別子で2つのファイルを結合する
約12900エントリと4400エントリの2つのファイルがあり、それらを結合したいと思います。ファイルには、世界中のすべての陸上気象観測所の位置情報が含まれています。最大のファイルは隔週で更新され、小さいファイルは年に1回程度更新されます。元のファイルはここにあります(http://www.wmo.int/pages/prog/www/ois/volume-a/vola-home.htmおよび http://weather.rap.ucar.edu/surface/ station.txt)。私が持っているファイルは、いくつかのawk、sed、およびbashスクリプトが混在しているため、すでに操作されています。このファイルを使用して、Unidataから無料で入手できるGEMPAKパッケージを使用してデータを視覚化します。最大のファイルはGEMPAKで動作しますが、完全な機能では動作しません。これには結合が必要です。 ファイル1には、気象観測ステーションの位置情報が含まれています。最初の6桁は、ステーションの一意の識別子です。さまざまなパラメーター(ステーション番号、ステーション名、国コード、緯度経度、ステーション標高)は、ライン内の位置によってのみ定義されます(タブはありません)。 060090 AKRABERG FYR DN 6138 -666 101 060100 VAGA FLOGHAVN DN 6205 -728 88 060110 TORSHAVN DN 6201 -675 55 060120 KIRKJA DN 6231 -631 55 060130 KLAKSVIK HELIPORT DN 6221 -656 75 060160 HORNS REV A DN 5550 786 21 060170 HORNS REV B DN …

1
クリップボードからHTMLをマークダウンテキストとして保存
Webページのセクションを強調表示してクリップボードにコピーし、マークダウンとしてローカルディスクに保存できるようにしたいのですが。それを行うための効率的な方法が必要です。 私の現在の面倒な方法は: セクションをハイライトしてクリップボードにコピー Libre Office Writerを開く Writerに貼り付ける WriterドキュメントをHTMLとして保存 オープンターミナル cd HTMLを保存したディレクトリに pandoc -s -r html /home/me/a/b/mydoc.html -o /home/me/a/b/mydoc.md 明らかに、もっと良い方法が必要です!助言がありますか?

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