我有一个以下格式的字符串:
I'm\nNed\nNederlander
I'm\nLucky\nDay
I'm\nDusty\nBottoms
Run Code Online (Sandbox Code Playgroud)
我想将它逐行移动到一个字符串数组,以便:
$ echo "${ARRAY[0]}"
I'm\nNed\nNederlander
$ echo "${ARRAY[1]}"
I'm\nLucky\nDay
$ echo "${ARRAY[2]}"
I'm\nDusty\nBottoms
Run Code Online (Sandbox Code Playgroud)
但是,我遇到了字符串本身中"\n"字符的问题.它们在字符串中表示为两个单独的字符,反斜杠和'n',但是当我尝试进行数组拆分时,它们会被解释为换行符.因此,典型的字符串拆分IFS不起作用.
例如:
$ read -a ARRAY <<< "$STRING"
$ echo "${#ARRAY[@]}" # print number of elements
2
$ echo "${ARRAY[0]}"
I'mnNednNederla
$ echo "${ARRAY[1]}"
der
Run Code Online (Sandbox Code Playgroud) 我正在尝试将字符串拆分为两个变量(不必使用while循环):
var="hello:world"
IFS=':' read var1 var2 <<< $var
echo "var1: $var1"
echo "var2: $var2"
Run Code Online (Sandbox Code Playgroud)
但我没有得到预期的结果:
var1: 'hello world'
var2: ''
Run Code Online (Sandbox Code Playgroud)
任何人都可以解释是否可以这样做(或类似的方式)?
我是bash脚本的新手.我想在变量中保存sql-query输出,但是
实际上我必须连接每个查询到mysql:
mysql -u $MYUSER -p$MYPASS -D database
Run Code Online (Sandbox Code Playgroud)
并希望将每个输出保存为单独变量
示例查询是: SELECT domain FROM domains WHERE user='$USER'
至
$variable1 = FIRST_OUTPUT
$variable2 = 2ND_OUTPUT
Run Code Online (Sandbox Code Playgroud)
谢谢
鉴于以下数据:
field1;field2;field3;field4;
Run Code Online (Sandbox Code Playgroud)
如何获取此字符串中的字段数?例如,对于这种情况,命令应该返回4.
实际上,我在每一行中都没有相同数量的内容,但无论如何我都需要将它们全部归还.一旦我设法计算了字段的数量,我还将设法制作一个循环来获取所有字段.
我是shell脚本的新手,请你帮忙解决以下问题,谢谢.
$AU_NAME=AU_MSM3-3.7-00.01.02.03
#separate the string after last "-", with "." as delimiter
#that is, separate "00.01.02.03" and print/save as below.
major=00
minor=01
micro=02
build=03
Run Code Online (Sandbox Code Playgroud) 让我们说" textfile "包含以下内容:
lorem$ipsum-is9simply the.dummy text%of-printing
Run Code Online (Sandbox Code Playgroud)
并且您想要在单独的行上打印每个单词.但是,单词不仅应由空格定义,还应由所有非字母数字字符定义.所以结果应该是这样的:
lorem
ipsum
is9simply
the
dummy
text
of
printing
Run Code Online (Sandbox Code Playgroud)
如何使用Bash shell完成此操作?
一些说明:
这不是一个家庭作业问题.
只应用空格确定单词的简单情况很容易.只写:
for i in `cat textfile`; do echo $i; done;
Run Code Online (Sandbox Code Playgroud)
会做的伎俩,并返回:
lorem$ipsum-is9simply
the.dummy
text%of-printing
Run Code Online (Sandbox Code Playgroud)
对于使用非字母数字字符拆分单词我看过使用IFS环境变量的解决方案(下面的链接),但我想避免使用IFS有两个原因:1)它需要(我认为)将IFS设置为长非字母数字字符列表.2)我发现它有点难看.
以下是我发现的两个相关问答
如何在Bash中的分隔符上拆分字符串?
如何将一行划分为bash中由一个或多个空格分隔的单词?
我有一个家庭作业,我需要从文件中获取输入并连续删除一行中的第一个单词并将其附加到行的末尾,直到完成所有组合.
我真的不知道从哪里开始,并会感谢任何方向.
令我困惑的部分是假设在不使用数组的情况下执行.我不只是为了解决问题而钓鱼,我只是在寻找一些方向.
SAMPlE INPUT:
Pipes and Filters
Java Swing
Software Requirements Analysis
Run Code Online (Sandbox Code Playgroud)
样本输出:
Analysis Software Requirements
Filters Pipes and
Java Swing
Pipes and Filters
Requirements Analysis Software
Software Requirements Analysis
Swing Java
Run Code Online (Sandbox Code Playgroud) 我有一个包含IP地址的bash变量(没有CIDR或任何东西,只有四个八位字节).
我需要将这个变量分成四个独立的八位字节,如下所示:
$ip = 1.2.3.4;
$ip1 = 1
$ip2 = 2
# etc
Run Code Online (Sandbox Code Playgroud)
所以我可以逃脱sed期间.有一个更好的方法吗?是awk我在找什么?
我有一个字符串
echo $STRING
Run Code Online (Sandbox Code Playgroud)
这使
first second third fourth fifth
Run Code Online (Sandbox Code Playgroud)
基本上是列表分隔的空格.
我如何获取该字符串并使其成为一个数组
array[0] = first
array[1] = second
Run Code Online (Sandbox Code Playgroud)
等等..
我试过了
IFS=' ' read -a list <<< $STRING
Run Code Online (Sandbox Code Playgroud)
但是当我做的时候
echo ${list[@]}
Run Code Online (Sandbox Code Playgroud)
它只打印出"第一"而没有别的
我正在尝试从包含管道("|")作为分隔符并包含空格的字符串创建数组.我一直在寻找一段时间,我已经接近了,比如像我如何在Bash中的分隔符上拆分字符串?,将字符串拆分成数组,然后更多.我很接近但不太合适.两个主要问题是字符串中有空格,有起始和结束分隔符,有些字段是空白的.此外,我不是只回显值,而是将它们分配给变量.这是源数据的格式:
|username|full name|phone1|phone2|date added|servers|comments|
Run Code Online (Sandbox Code Playgroud)
例:
|jdoe | John Doe| 555-1212 | |1/1/11 | workstation1, server1 | added by me |
Run Code Online (Sandbox Code Playgroud)
这就是我需要的:
Username: jdoe
Fullname: John Doe
Phone1: 555-1212
Phone2:
Date_added: 1/1/11
Servers: workstation1, server1
Comments: guest account
Run Code Online (Sandbox Code Playgroud)
编辑:我使用sed去掉每个分隔符之前和之后的第一个和最后一个分隔符和空格,现在输入:
jdoe|John Doe|555-1212||1/1/11|workstation1, server1|added by me
Run Code Online (Sandbox Code Playgroud)
这是我尝试过的事情:
oIFS="$IFS"; IFS='|'
for line in `cat $userList`; do
arr=("$line")
echo "Username: ${arr[0]}" #not assigning a variable, just testing the output
echo "Full Name: ${arr[1]}"
echo "Phone 1: ${arr[2]}"
echo "Phone 2: ${arr[3]}" …Run Code Online (Sandbox Code Playgroud)