unix/shell/bash 的新手。我有一個檔案名 CellSite,其第 6 行如下:
btsName = "RV74XC038",
我想從雙引號(ieRV74XC038)之間的第 6 行中提取字串并將其保存到變數中。請注意,第 6 行以 4 個空格開頭。這個字串會因檔案而異。所以我正在尋找一種從雙引號之間的第 6 行提取字串的解決方案。
我在下面試過。但不起作用。
str2 = sed '6{ s/^btsName = \([^ ]*\) *$/\1/;q } ;d' CellSite;
任何幫助深表感謝。TIA。
uj5u.com熱心網友回復:
sed
是一個流式編輯器。
對于僅決議檔案,您需要查看awk
. 像這樣的東西:
awk -F \" '/btsName/ { print $2 }' CellSite
在哪里:
-F
定義一個“欄位分隔符”,在你的情況下是引號"
- 整個腳本包括:
/btsName/
僅對包含正則運算式“btsName”的行起作用- 從該行列印出第二個欄位;第一個欄位將是第一個引號之前的所有內容,第二個欄位將是從第一個引號到第二個引號的所有內容,第三個欄位將是第二個引號之后的所有內容
- 決議名為“CellSite”的檔案
可能有更好的選擇,但您必須顯示檔案的其余部分。
uj5u.com熱心網友回復:
使用sed
$ str2=$(sed '6s/[^"]*"\([^"]*\).*/\1/' CellSite)
$ echo "$str2"
RV74XC038
uj5u.com熱心網友回復:
您可以使用以下awk
解決方案:
btsName=$(awk -F\" 'NR==6{print $2; exit}' CellSite)
基本上,到第六行(NR==6
),列印第二個欄位值("
用于將記錄(行)拆分為欄位),然后退出。
查看在線演示:
#!/bin/bash
CellSite='Line 1
Line 2
Line 3
btsName = "NO74NO038",
Line 5
btsName = "RV74XC038","
Line 7
btsName = "no11no000",
'
btsName=$(awk -F\" 'NR==6{print $2; exit}' <<< "$CellSite")
echo "$btsName" # => RV74XC038
uj5u.com熱心網友回復:
這可能對您有用(GNU sed):
var=$(sed -En '6s/.*"(.*)".*/\1/p;6q' file)
簡化正則運算式并關閉隱式列印。
只關注第 6 行并列印雙引號之間的值,然后退出。
Bash 通過 插入 sed 呼叫,$(...)
提取的值定義變數var
。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/473836.html
上一篇:視窗位置中的回顯變數不起作用
下一篇:返回列表