&"variable name"
たとえば、2つのファイルがあり、ファイル内の変数は次のようにintl_reg.sql
なります。trans_by_detc.sql
intl_reg.sql
&campus
&level
&ptc
&visa
&term
&sort
ファイルからtrans_by_detc.sql
、
&detc
&date1
&date2
&credits
リストを作成し、以下のようなファイルに書きたいです。
intl_reg.sql campus level ptc visa term sort
trans_by_detc.sql detc date1 date2 credits
可能ですかgrep
?
答え1
そして牛に似た一種の栄養 grep
:
$ grep -oP '^&\K\w+' file | paste -sd ' ' -
正規表現の一致は次のとおりです。
節 | 説明する |
---|---|
^ |
文字列の始まり |
& |
& |
\K |
K Lookbehindアサーションを使用して、より短い代替方法で一致開始(ept)をリセットします。周りを見てくださいそして正規表現でKをサポート |
\w+ |
単語文字(az、AZ、0-9、_)(1回以上(最大限一致)) |
またはいつものようにgrep
:
$ grep -o '[[:alnum:]_]\{1,\}' file | paste -sd ' ' -
正規表現の一致は次のとおりです。
節 | 説明する |
---|---|
[[:alnum:]_] |
すべての文字:文字と数字、「_」 |
\{1,\} |
少なくとも一度は |
適用対象:
- ソラリス11
- FreeBSD 13.1-
- 忙しい箱
- ニコス
- 高山の
ash
殻 - ...
出力
campus level ptc visa term sort
完全なOP要件を含める
$ for s in intl_reg.sql trans_by_detc.sql; do
printf '%s\n' "$s $(grep -o '[[:alnum:]_]\{1,\}' "$s" | paste -sd ' ' -)"
done
intl_reg.sql campus level ptc visa term sort
trans_by_detc.sql detc date1 date2 credits
答え2
perl -nE '$v{$1}++ while /&(\w+)/g; END{say join " ", sort keys%v}' your-file
&
ASCII単語のランダムな位置に続く一意の文字シーケンスのソートされたリストを印刷しますyour-file
。
sql
現在の作業ディレクトリ内のすべてのファイルを処理します。
perl -nE '$a{$1}++ while /&(\w+)/g;
if (eof) {
say join " ", $ARGV, sort keys%a; undef %a
}' ./*.sql