Bash - 在自定义分隔符后将字符串保存为单独的变量

时间:2017-08-14 18:11:21

标签: string bash parsing scripting

我对Bash相当新,所以请原谅我,但我正在构建一个Bash脚本,可以接受可以有很多开关的用户输入命令。我需要编写一个从该用户提供的命令中提取特定数据的函数。

在" -mode"" -mode"之后,我似乎找不到拉出每个单词的方法。并将其推入某种数组或列表中。

以下是用户输入命令的示例:

/home/custom/function/that/accepts/a/billion/switches  random_info random_info2 -worker vendor_schmo  -switch_one  -anotherOne  -more_switches  -optionTwo        -mode FOO -mode BAR -mode BAZ -mode BAG -mode DAT -mode RAR

我试过摆弄awk -F" -mode" ' {print $ 1}'那不起作用。任何建议将不胜感激!!

以下是脚本中提取此信息的代码段:

manualRunMain(){
  local command
  manualRunHeaderPrint
  echo
  echo
  echo
  echo
  lineBreakPrint
  read -p "Enter your command here: " command
  sleep .25
  manualRun "$command"
}

manualRun(){
  manualRunHeaderPrint
  jobRunSubHeaderPrint
  pullModeNames "$1"
}

pullModeNames(){

}

2 个答案:

答案 0 :(得分:2)

您可以在awk中使用angular.module('uvox-player').controller('PlaylistCoverController', function($scope, Api, $state, $q, $http, $mdToast, ngDialog, $stateParams) { $scope.selectPlaylist($stateParams.id); Api.getPlaylist($stateParams.id).then(function(data) { $scope.cover = data.cover; }, function(error) { }); $scope.importCover = function(event) { var file = event.target.files[0]; Api.postPlaylistCover($scope.selectedPlaylist, 'cover[file]', file).then(function(data) { $state.reload(); }, function(error) { }); } 变量告诉在获取RS时将数据拆分为单独的记录:

-mode

填充数组:

s='/home/custom/function/that/accepts/a/billion/switches  random_info random_info2 -worker vendor_schmo  -switch_one  -anotherOne  -more_switches  -optionTwo        -mode FOO -mode BAR -mode BAZ -mode BAG -mode DAT -mode RAR'

printf '%s' "$s" | awk -v RS="-mode[[:space:]]*" 'NR>1'
FOO
BAR
BAZ
BAG
DAT
RAR

答案 1 :(得分:0)

我刚刚提出了与@anubhava基本相同的答案,但使用GNU grep而不是awk:

jsonObject.get("Name").toString();