相关疑难解决方法(0)

如何将包含字符"\n"的多行字符串拆分为bash中的字符串数组?

我有一个以下格式的字符串:

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)

arrays string bash escaping

14
推荐指数
2
解决办法
3万
查看次数

试图将字符串拆分为两个变量

我正在尝试将字符串拆分为两个变量(不必使用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 shell ifs

13
推荐指数
2
解决办法
1万
查看次数

bash - SQL查询输出到变量

我是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)

谢谢

mysql sql variables bash shell

12
推荐指数
1
解决办法
4万
查看次数

如何获取分隔字符串中的字段数?

鉴于以下数据:

 field1;field2;field3;field4;
Run Code Online (Sandbox Code Playgroud)

如何获取此字符串中的字段数?例如,对于这种情况,命令应该返回4.

实际上,我在每一行中都没有相同数量的内容,但无论如何我都需要将它们全部归还.一旦我设法计算了字段的数量,我还将设法制作一个循环来获取所有字段.

bash shell cut

9
推荐指数
3
解决办法
3万
查看次数

在shell中,用点作为分隔符拆分字符串的一部分

我是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)

linux shell

9
推荐指数
2
解决办法
2万
查看次数

Bash:将文本文件拆分为包含非字母数字字符作为分隔符的单词

让我们说" 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完成此操作?



一些说明:

bash scripting parsing

8
推荐指数
1
解决办法
5874
查看次数

如何在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)

bash shell text-parsing

6
推荐指数
1
解决办法
4359
查看次数

需要将存储在bash变量中的IP地址分解为八位字节

我有一个包含IP地址的bash变量(没有CIDR或任何东西,只有四个八位字节).

我需要将这个变量分成四个独立的八位字节,如下所示:

$ip = 1.2.3.4; 
$ip1 = 1
$ip2 = 2
# etc
Run Code Online (Sandbox Code Playgroud)

所以我可以逃脱sed期间.有一个更好的方法吗?是awk我在找什么?

regex variables bash sed ip-address

6
推荐指数
2
解决办法
1万
查看次数

Bash脚本将带空格分隔标记的字符串转换为数组

我有一个字符串

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)

它只打印出"第一"而没有别的

linux arrays bash shell

6
推荐指数
1
解决办法
1万
查看次数

将字符串bash转换为带有空格和额外分隔符的数组

我正在尝试从包含管道("|")作为分隔符并包含空格的字符串创建数组.我一直在寻找一段时间,我已经接近了,比如像我如何在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)

arrays string bash delimiter

5
推荐指数
1
解决办法
2万
查看次数

标签 统计

bash ×9

shell ×6

arrays ×3

linux ×2

string ×2

variables ×2

cut ×1

delimiter ×1

escaping ×1

ifs ×1

ip-address ×1

mysql ×1

parsing ×1

regex ×1

scripting ×1

sed ×1

sql ×1

text-parsing ×1