Questions tagged «string»

字符串操作:提取字符串的一部分,替换文本,格式化为给定的宽度等。


2
在外壳上进行JSON解析
如何解析Shell上的JSON输出? 例如,Amazon Web Services提供了一个CLI来检索实例的状态: $ aws ec2 describe-instances <my_instance_id> 但是该命令返回JSON字符串。该命令的输出如下所示: $ aws ec2 describe-instances x12345 { "Reservations" : { "OwnerId": "1345345" "Groups": [], "SecurityGroups": [ { "Foo" : "yes" "Bar" : "no } ] } } 是否有可用于解析JSON输出的shell内置程序? 例如,我想在shell变量中捕获FOO以下内容output["Reservations"]["SecurityGroups"][0]{"Foo"}。 如果有帮助,我对Zsh可能适用的解决方案特别感兴趣。
11 zsh  string  json 

4
如何POSIX-ly计算字符串变量中的行数?
我知道我可以在Bash中做到这一点: wc -l <<< "${string_variable}" 基本上,我发现的所有内容都涉及<<<Bash运算符。 但是在POSIX shell中,它<<<是未定义的,而且我几个小时都无法找到替代方法。我很确定有一个简单的解决方案,但是不幸的是,到目前为止我还没有找到它。

6
bash查找以字符串开头的行
我有一堆文件,我想找到其中一个包含以某个字符串开头的连续行的文件。 例如以下文件: Aaaaaaaaaaaa Baaaaaaaaaaa Cxxxxxxxxx Cyyyyyyyyy Czzzzzzzzz Abbbbbbbbbbb Bbbbbbbbbbbb Caaaaaa Accccccccccc Bccccccccccc Cdddddd Ceeeeee 有多个以'C'开头的行,因此我希望通过命令找到该文件。 例如以下文件: Aaaaaaaaaaaa Baaaaaaaaaaa Cxxxxxxxxx Abbbbbbbbbbb Bbbbbbbbbbbb Caaaaaa Accccccccccc Bccccccccccc Cdddddd 总会有一行以'C'开头,我不要这个文件。我想到使用a grep或a,sed但我不知道该怎么做。也许使用正则表达式^C.*$^C或类似的东西。任何的想法 ?
10 bash  sed  grep  string 

5
bash中路径名称的模式匹配
我想对目录中的子目录列表进行操作。考虑: for x in x86-headers/*/C/populate.sh; do echo $x; done 这给 x86-headers/elf/C/populate.sh x86-headers/gl/C/populate.sh x86-headers/gmp/C/populate.sh x86-headers/gnome2/C/populate.sh x86-headers/gtk2/C/populate.sh x86-headers/jni/C/populate.sh x86-headers/libc/C/populate.sh 但我想值对应于路径的第二部分 elf,gl等我知道如何去掉领先x86-headers。 for x in x86-headers/*/C/populate.sh; do i=${x##x86-headers/}; echo $i; done 这使 elf/C/populate.sh gl/C/populate.sh gmp/C/populate.sh gnome2/C/populate.sh gtk2/C/populate.sh jni/C/populate.sh libc/C/populate.sh 我也知道如何删除路径中的后续术语。即下降一级: cd x86-headers for x in */C/populate.sh; do i=${x%%/*}; echo $i; done 给 elf …


2
动态构建命令
我正在编写脚本,因此需要tar动态生成命令。 这是两个示例,以说明我要执行的操作: #!/bin/bash TAR_ME="/tmp" EXCLUDE=("/tmp/hello hello" "/tmp/systemd*" "/tmp/Temp*") _tar="tar "`printf -- '--exclude="%s" ' "${EXCLUDE[@]}"`" -zcf tmp.tar.gz" echo COMMAND: "${_tar}" ${_tar} "$TAR_ME" echo -e "\n\nNEXT:\n\n" EXCLUDE=("--exclude=/tmp/hello\ hello" "--exclude=/tmp/systemd*" "--exclude=/tmp/Temp*") _tar="tar "`printf -- '%s ' "${EXCLUDE[@]}"`" -zcf test.tar.gz" echo COMMAND: "${_tar}" ${_tar} "$TAR_ME" 我希望能够_tar用作命令,已经能够使其与经典路径一起使用,但是我需要它与文件夹名称中的空格一起使用。而且每一次我都会看到类似以下的错误: COMMAND: tar --exclude="/tmp/hello hello" --exclude="/tmp/systemd*" --exclude="/tmp/Temp*" -zcf tmp.tar.gz …

4
在/ bin / sh中的冒号上分割字符串
我的dash脚本采用形式的参数hostname:port,即: myhost:1234 而port是可选的,即: myhost 我需要将主机和端口读入单独的变量。在第一种情况下,我可以这样做: HOST=${1%%:*} PORT=${1##*:} 但这在第二种情况下不起作用,当省略了port时;echo ${1##*:}只是返回主机名,而不是一个空字符串。 在Bash中,我可以这样做: IFS=: read A B <<< asdf:111 但这不适用于dash。 能否在拆分字符串:在仪表板,而无需调用外部程序(awk,tr,等)?
9 shell  string  dash 

5
如何将/ path / to / file缩写为/ p / t / file
我正在寻找一种优雅的单行代码(例如awk),它将使用每个父级/中间级的第一个字符,但使用完整的基名来缩短Unix路径的字符串。通过示例更容易显示: /path/to/file → /p/t/file /tmp → /tmp /foo/bar/.config/wizard_magic → /f/b/./wizard_magic /foo/bar/.config/wizard_magic→ /f/b/.c/wizard_magic 鉴于下面@MichaelKjörling和@ChrisH的优点,本示例说明了当第一个字符为点时我们如何显示前两个字符。
9 sed  awk  string 

4
如何断言字符串具有换行符,如果有,请将其删除
我有一个字符串,这是我无法控制的某些操作的结果。当我使用打印此变量时echo,我得到: echo $myvar hello 但是,当我这样做 if [ $myvar = "hello" ]; then echo they are equal else echo they are not equal fi 我总是得到他们不平等。我怀疑这是因为newline角色。 该字符串的行为也很奇怪。当我做: newVAR="this is my var twice: "$myvar$myvar echo $newVAR 我得到: hellois my var twice: hello 如何检查这是否实际上是由于a引起的newline,如果是,将其删除?
9 bash  string 

2
管道bash字符串操作
我读过其他一些管道bash字符串操作问题,但它们似乎是专门的应用程序。 从本质上讲,有没有一种方法可以使以下操作更简单? 代替 $ string='hello world'; string2="${string// /_}"; echo "${string2^^}" HELLO_WORLD 就像是 $ echo 'hello world' | $"{-// /_}" | "${ -^^}" HELLO_WORLD 编辑我有兴趣尽可能保持bash操纵以保持速度(与sed / awk相反,后者往往会大大减慢我的脚本的速度) Edit2:@jimmij 我喜欢第二个示例,并引导我编写了一个函数。 bash_m() { { read x; echo "${x// /_}"; } | { read x; echo "${x^^}"; }; } echo hello world | bash_m …

4
仅使用bash将单个字符串拆分为字符数组
我想只使用bash 拆分'hello'成h e l l o数组,我可以用sed来做,sed 's/./& /g'但是我想知道当我不知道分隔符是什么,或者分隔符是任意的时,如何在Bash中将字符串拆分成数组单个字符。我不认为我不能${i// /}没有创造力,因为分隔符是一个未知数,我也不认为表达式接受正则表达式。我尝试将BASH_REMATCH与[[string =〜([az]。)。*]]结合使用,但是它没有按预期工作。仅使用bash来完成某种string.split()行为的正确方法是什么?原因是我试图在所有bash中编写rev实用程序: while read data; do word=($(echo $data|tr ' ' '_'|sed 's/./& /g')) new=() i=$((${#word[@]} - 1)) while [[ $i -ge 0 ]]; do new+=(${word[$i]}) (( i-- )) done echo ${new[@]}|tr -d ' '|tr '_' ' ' done 但是我使用了tr和sed,我想知道如何正确进行分割,然后将其修复为bash。纯娱乐。
9 bash  string  split 

2
grep比赛中的字符
我正在寻找一个巨大的数据库转储中的查找和替换对象,并且它没有做我认为应该发生的事情。我想在文件中grep输入目标字符串,然后查看周围的8个字符左右(我可能需要调整该数字,具体取决于)。我怎样才能做到这一点? 我之所以不能打交道,是因为有数百场比赛,甚至数千场比赛。我想获得一些围绕字符串的字符,然后将其通过管道uniq传递到或某种东西中,以查看为什么我的查找和替换有意外行为。 另外,同一行上可以有多个匹配项!

2
测试变量是否包含换行符(POSIX)
我知道有些外壳接受这种测试: t() { [[ $var == *$'\n'* ]] && res=yes || res=no printf '%s ' "$res"; } var='ab cd' t var='abcd' t echo 执行时: $ bash ./script yes no 什么是POSIX(破折号)工作等效项 以下是可靠的测试方法吗? nl=' ' t() { case "$var" in *$nl* ) res=yes ;; * ) res=no ;; esac printf '%s ' …

4
如何将字符串的一部分提取到变量中?
我有一些这样的文件中的一行: attempting to create a 512^3 level (with Dirichlet BC) using a 16^3 grid of 32^3 boxes and 800 tasks... 我想提取的512^3,16^3,32^3并800从它的四个数字分别为它们分配到四个变量level,grid,boxes和tasks用于其他用途。 我怎样才能做到这一点?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.