私はたくさんのテキストを含むファイルを持っています、私がしたいのはすべての英数字の単語を削除することです。
Example of words to be removed:
gr8
2006
sdlfj435ljsa
232asa
asld213
ladj2343asda
asd!32
私がこれを行うことができる最善の方法は何ですか?
私はたくさんのテキストを含むファイルを持っています、私がしたいのはすべての英数字の単語を削除することです。
Example of words to be removed:
gr8
2006
sdlfj435ljsa
232asa
asld213
ladj2343asda
asd!32
私がこれを行うことができる最善の方法は何ですか?
文字と数字で構成されるすべての単語を削除し、すべての数字またはすべての文字で構成される単語のみを残す場合:
sed 's/\([[:alpha:]]\+[[:digit:]]\+[[:alnum:]]*\|[[:digit:]]\+[[:alpha:]]\+[[:alnum:]]*\) \?//g' inputfile
例:
$ echo 'abc def ghi 111 222 ab3 a34 43a a34a 4ab3' | sed 's/\<\([[:alpha:]]\+[[:digit:]]\+[[:alnum:]]*\|[[:digit:]]\+[[:alpha:]]\+[[:alnum:]]*\) \?//g'
abc def ghi 111 222
サンプルテキストから必要な唯一の出力がで2006
あり、1行に1つの単語があると仮定します。
sed '/[[:alpha:]]\+/{/[[:digit:]]\+/d}' /path/to/alnum/file
$ cat alnum
gr8
2006
sdlFj435ljsa
232asa
asld213
ladj2343asda
asd!32
alpha
$ sed '/[[:alpha:]]\+/{/[[:digit:]]\+/d}' ./alnum
2006
alpha
目標が実際にすべての英数字の単語(文字と数字だけで構成される文字列)を削除することである場合、このsed
コマンドは機能します。すべての英数字の文字列を何も置き換えません。
sed 's/[[:alnum:]]*//g' < inputfile
他の文字クラスalnum
も利用できることに注意してください(を参照man 7 regex
)。
与えられたサンプルデータの場合、これにより6行の空白行と1行だけが残ります(これは!
、サンプルデータの唯一の英数字ではないためです)。これは実際にあなたがやろうとしていることですか?
AWKソリューション:
BEGIN { # Statement that will be executed once at the beginning.
FS="[ \t]" # Set space and tab characters to be treated as word separator.
}
# Code below will execute for each line in file.
{
x=1 # Set initial word index to 1 (0 is the original string in array)
fw=1 # Indicate that future matched word is a first word. This is needed to put newline and spaces correctly.
while ( x<=NF )
{
gsub(/[ \t]*/,"",$x) # Strip word. Remove any leading and trailing white-spaces.
if (!match($x,"^[A-Za-z0-9]*$")) # Print word only if it does not match pure alphanumeric set of characters.
{
if (fw == 0)
{
printf (" %s", $x) # Print the word offsetting it with space in case if this is not a first match.
}
else
{
printf ("%s", $x) # Print word as is...
fw=0 # ...and indicate that future matches are not first occurrences
}
}
x++ # Increase word index number.
}
if (fw == 0) # Print newline only if we had matched some words and printed something.
{
printf ("\n")
}
}
script.awk' and data in
data.txtawk`に, you have to invoke
次のようなスクリプトがあると仮定します。
awk -f ./test.awk ./data.txt
あなたのファイルのためにそれは生成します:
asd!32
このようなより複雑なケースの場合:
gr8
2006
sdlfj435ljsa
232asa he!he lol
asld213 f
ladj2343asda
asd!32 ab acd!s
...これを生成します:
he!he
asd!32 acd!s
それが役に立てば幸い。幸運を!