Linux의 파일에서 문자열과 와일드카드 문자를 출력하는 방법은 무엇입니까?

Linux의 파일에서 문자열과 와일드카드 문자를 출력하는 방법은 무엇입니까?

그래서 로그/텍스트 파일이 있습니다. 해당 파일에는 많은 정보가 있지만 특정 문자열만 얻고 싶습니다.

@@204,clientDisconnect,"apMac"="60:d0:2c:3a:f2:60","clientMac"="8c:45:00:84:e8:98","ssid"="Th","userId"="","wlanId"="240","iface"="wlan32","tenantU,19",,"userName"="d","vlanId"="512","radio"="a/n/ac","encryption"="WPA2-AES","osType"="Android","hostname"="Galaxy-S9","firstAuth"="1580412687","associationTime"="1580411444","ipAssignTime"="1580412688","disconnectTime"="1580412724","sessionDuration"="37","disconnectReason"="8","rxFrames"="26","rxBytes"="4415","txFrames"="93","txBytes"="22693","peakRx"="4415","peakTx"="22693","rssi"="62","receivedSignalStrength"="-43","Instantaneous

다만 disconnectReason = "8", 클라이언트의 연결이 끊어진 이유에 따라 연결 끊김 횟수가 달라질 수 있습니다. 파일을 검색하고 와일드카드 문자가 포함된 문자열만 출력하는 방법을 잘 모르겠습니다.

나는 그것이 출력되기를 원합니다 :

disconnectReason ="8"
disconnectReason ="3"
disconnectReason ="1" etc.....

답변1

말씀하신 내용에 따르면 이 문제를 해결할 수 있는 방법은 여러 가지가 있습니다. 이 방법이면 충분할 것입니다.

grep -oE '"disconnectReason"="[0-9]+"' yourfile

-ogrep반환할 문자열의 일치하는 부분만 알려줍니다 .

답변2

제공한 예제가 파일의 한 줄이라고 가정하면 sed사용 중인 필드 앞과 뒤의 모든 내용을 제거할 수 있습니다.

sed -E 's/.*,("disconnectReason"="[0-9]+"),.*/\1/' <file>

이는 관심 있는 필드와 값을 "기억"하기 위해 괄호로 묶인 하위 표현식을 사용하여 while 라인을 대체합니다. 그런 다음 이 필드와 값은 \1기억된 첫 번째(이 경우에만) 하위 표현식을 참조하는 데 사용됩니다.

주변의 큰따옴표를 제거하는 것에 대해 정말로 단호하다면 disconnectReason정규식을 복잡하게 만드는 대신 다른 sed 필터를 사용하여 이를 수행할 것입니다. 덜 효율적일 수 있지만 읽기가 더 쉽습니다.

sed -E 's/.*,("disconnectReason"="[0-9]+"),.*/\1/' <file> |
   sed -E 's/"(disconnectReason)"/\1/'

관련 정보