我正在尝试将 Spoken 行上两个括号之间的所有信息删除到一个单独的文件中
I am trying to remove all info between the two brackets on the Spoken line into a separate file
我有一个包含一些值的 file.txt。我不确定如何从某一行的括号中提取信息。
这条线是 Oscar,我需要提取的信息在括号之间
Sonia = 0
Oscar = [191, 229, 115, 105, 0, 78, 154, 122, 210, 0]
EnableDebugConsole = true
Ralph = 99
Run = 0
如果我能在有和没有括号的情况下保存值,那就太好了,这样我以后就知道了。从这个网站上,我收集了一些示例并进行了尝试。
grep Oscar file.txt > file_remove.txt
cut -d \= -f 2 file_remove.txt | tr -d " \t\n\r" > file_brackets.txt
cat file_brackets.txt
[191,229,115,105,0,78,154,122,210,0]
即使这可能不是最好的方法,我仍然实现了我的目标之一并且我有信息
现在我该如何删除括号,这样我就可以让 file_no_brackets.txt 只包含括号之间的值,就像这样
191,229,115,105,0,78,154,122,210,0
您可以使用 sed
非常简单地完成它,例如
$ sed -n '/^Oscar/s/^[^[]*[[]\([^]]*\).*$//p' file
191, 229, 115, 105, 0, 78, 154, 122, 210, 0
说明
sed -n
禁止打印图案 space
/^Oscar/
定位以 Oscar
开头的行
's/match/replace/
标准 sed
替换匹配正则表达式 match
并将其替换为 replace
在替换中你有 /^[^[]*
匹配所有字符而不是 '['
[[]
匹配 '['
\([^]]*\)
捕获所有不是 ']'
的字符(剩余字符与 .*$
匹配)
replace
是 </code> 这是一个 <em> 反向引用 </em> 替换为 [=28= 中捕获组中的文本] 以上.</p></li>
<li><p><code>/p
打印 /^Oscar/
和替换的匹配结果。
完成。
awk
救援!
$ awk -F'\[|\]' '/Oscar/{print }' file
将字段分隔符设置为右方括号或左方括号。找到该行并打印第一个和第二个字段分隔符(即字段 2)之间的文本。
以下 awk 也可以帮助您。
解决方案 1: 通过使用简单的搜索字符串 Oscar
并使用 gsub
实用程序全局替换使用提供的正则表达式。
awk '/Oscar/{gsub(/.*\[|\]/,"");gsub(/, /,",");print}' Input_file
解决方案 2: 通过简单搜索字符串 Oscar
然后使用 match
函数 awk
如下。
awk '/Oscar/{gsub(/, /,",");match([=11=],/\[.*\]/);if(substr([=11=],RSTART+1,RLENGTH-2)){print substr([=11=],RSTART+1,RLENGTH-2)}}' Input_file
解决方案 3: 创建字段分隔符 ][
并打印所需的适当字段。
awk -F"[][]" '/Oscar/{gsub(/, /,",",);print }' Input_file
使用gawk
$ awk 'match([=10=],/^Oscar.*\[([^]]*)]/,arr){print arr[1]}' infile
测试结果:
$ cat infile
Sonia = 0
Oscar = [191, 229, 115, 105, 0, 78, 154, 122, 210, 0]
EnableDebugConsole = true
Ralph = 99
Run = 0
$ awk 'match([=11=],/^Oscar.*\[([^]]*)]/,arr){print arr[1]}' infile
191, 229, 115, 105, 0, 78, 154, 122, 210, 0
任何 awk
$ awk '/^Oscar/ && gsub(/^.*\[|\]/,"")' infile
191, 229, 115, 105, 0, 78, 154, 122, 210, 0
仅在需要时使用 grep
grep "Oscar = \[" file.txt | grep -o [0-9][^]]* >file_no_brackets.txt
我有一个包含一些值的 file.txt。我不确定如何从某一行的括号中提取信息。
这条线是 Oscar,我需要提取的信息在括号之间
Sonia = 0
Oscar = [191, 229, 115, 105, 0, 78, 154, 122, 210, 0]
EnableDebugConsole = true
Ralph = 99
Run = 0
如果我能在有和没有括号的情况下保存值,那就太好了,这样我以后就知道了。从这个网站上,我收集了一些示例并进行了尝试。
grep Oscar file.txt > file_remove.txt
cut -d \= -f 2 file_remove.txt | tr -d " \t\n\r" > file_brackets.txt
cat file_brackets.txt
[191,229,115,105,0,78,154,122,210,0]
即使这可能不是最好的方法,我仍然实现了我的目标之一并且我有信息
现在我该如何删除括号,这样我就可以让 file_no_brackets.txt 只包含括号之间的值,就像这样
191,229,115,105,0,78,154,122,210,0
您可以使用 sed
非常简单地完成它,例如
$ sed -n '/^Oscar/s/^[^[]*[[]\([^]]*\).*$//p' file
191, 229, 115, 105, 0, 78, 154, 122, 210, 0
说明
sed -n
禁止打印图案 space/^Oscar/
定位以Oscar
开头的行
's/match/replace/
标准sed
替换匹配正则表达式match
并将其替换为replace
在替换中你有
/^[^[]*
匹配所有字符而不是'['
[[]
匹配'['
\([^]]*\)
捕获所有不是']'
的字符(剩余字符与.*$
匹配)replace
是</code> 这是一个 <em> 反向引用 </em> 替换为 [=28= 中捕获组中的文本] 以上.</p></li> <li><p><code>/p
打印/^Oscar/
和替换的匹配结果。
完成。
awk
救援!
$ awk -F'\[|\]' '/Oscar/{print }' file
将字段分隔符设置为右方括号或左方括号。找到该行并打印第一个和第二个字段分隔符(即字段 2)之间的文本。
以下 awk 也可以帮助您。
解决方案 1: 通过使用简单的搜索字符串 Oscar
并使用 gsub
实用程序全局替换使用提供的正则表达式。
awk '/Oscar/{gsub(/.*\[|\]/,"");gsub(/, /,",");print}' Input_file
解决方案 2: 通过简单搜索字符串 Oscar
然后使用 match
函数 awk
如下。
awk '/Oscar/{gsub(/, /,",");match([=11=],/\[.*\]/);if(substr([=11=],RSTART+1,RLENGTH-2)){print substr([=11=],RSTART+1,RLENGTH-2)}}' Input_file
解决方案 3: 创建字段分隔符 ][
并打印所需的适当字段。
awk -F"[][]" '/Oscar/{gsub(/, /,",",);print }' Input_file
使用gawk
$ awk 'match([=10=],/^Oscar.*\[([^]]*)]/,arr){print arr[1]}' infile
测试结果:
$ cat infile
Sonia = 0
Oscar = [191, 229, 115, 105, 0, 78, 154, 122, 210, 0]
EnableDebugConsole = true
Ralph = 99
Run = 0
$ awk 'match([=11=],/^Oscar.*\[([^]]*)]/,arr){print arr[1]}' infile
191, 229, 115, 105, 0, 78, 154, 122, 210, 0
任何 awk
$ awk '/^Oscar/ && gsub(/^.*\[|\]/,"")' infile
191, 229, 115, 105, 0, 78, 154, 122, 210, 0
仅在需要时使用 grep
grep "Oscar = \[" file.txt | grep -o [0-9][^]]* >file_no_brackets.txt