我需要在獲取它之前清理一個組態檔。我需要洗掉任何有
- 從...開始
# - 任意數量的空白然后一個
# - 空行
#如果行以字串開頭,則洗掉(包括)及其后的所有內容。
示例配置:
# comment
# comment
dog=woof
cat=meow
moose=huuuuu #comment
# comment
### comment
我現在有這個
config_params="$(cat ./config_file.conf | grep -v "^#.* | awk -F '=' '{print$1}'
問題是第 2 行, # comment任意數量的空格,最多為#. 我怎樣才能匹配洗掉這樣的行?
uj5u.com熱心網友回復:
您可以使用以下方式awk:
awk -F= 'NF == 2 {sub(/[[:blank:]]*#.*/, ""); print}' file
dog=woof
cat=meow
moose=huuuuu
或者如果您想僅列印鍵名然后使用:
awk -F= 'NF == 2 {sub(/[[:blank:]]*#.*/, ""); print $1}' file
dog
cat
moose
uj5u.com熱心網友回復:
您可以使用
config_params=$(awk -F'=' '!/^[[:space:]]*#/{print $1}' ./config_file.conf)
查看在線演示:
#!/bin/bash
s='# comment
# comment
dog=woof
cat=meow
moose=huuuuu #comment
# comment
### comment'
awk -F'=' '!/^[[:space:]]*#/{print $1}' <<< "$s"
輸出:
dog
cat
moose
在這里,^[[:space:]]*#匹配字串的開頭,然后是零個或多個空格,然后是一個#。否定正!則運算式匹配結果,因此只有與此模式不匹配的行“被”拍攝“,則僅列印其欄位1值。
uj5u.com熱心網友回復:
這是另一個使用的作業解決方案sed:
config=$(sed -r -e '/^$/d' -e '/^ *#/d' -e 's/^(. )(#.*)$/\1/' [[YOUR_CONFIG_FILE_NAME]])
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/451868.html
