如何提取两个字符之间的字符串?

时间:2019-06-11 14:48:25

标签: awk sed

我有一个字符串“ foo [string] bar”,想从中提取“ string”,以消除之前和之后的所有内容。

我的grep没有-P选项,所以我尝试使用sed。

echo "foo [string] bar" | sed -n -e '/\[/,/\]/p'

我得到的是命令行中的完整字符串。

3 个答案:

答案 0 :(得分:2)

第一个解决方案: :如果您对#region Namespaces using System; using System.Data; using Microsoft.SqlServer.Dts.Runtime; using System.Windows.Forms; using System.Net.Mail; // Added #endregion namespace ST_ccd5e092bfdc417c8c29f1c22c390108 { [Microsoft.SqlServer.Dts.Tasks.ScriptTask.SSISScriptTaskEntryPointAttribute] public partial class ScriptMain : Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase { public void Main() { String SendMailFrom = Dts.Variables["mailfrom"].Value.ToString(); String SendMailTo = Dts.Variables["mailto"].Value.ToString(); String SendMailToName = Dts.Variables["mailname"].Value.ToString(); String SendMailSubject = Dts.Variables["mailsubject"].Value.ToString(); String SendMailBody = Dts.Variables["mailbody"].Value.ToString(); String SendMailAttach = Dts.Variables["vattach"].Value.ToString(); SendMailBody = SendMailToName + ",<p>" + SendMailBody; String SmtpServer = Dts.Connections["SMTP Connection Manager"].Properties["SmtpServer"].GetValue(Dts.Connections["SMTP Connection Manager"]).ToString(); // Create an email and change the format to HTML MailMessage myHtmlFormattedMail = new MailMessage(SendMailFrom, SendMailTo, SendMailSubject, SendMailBody); myHtmlFormattedMail.IsBodyHtml = true; // Create a SMTP client to send the email SmtpClient mySmtpClient = new SmtpClient(SmtpServer); if (String.IsNullOrEmpty(SendMailAttach)) { // } else { myHtmlFormattedMail.Attachments.Add(new Attachment(SendMailAttach)); } mySmtpClient.Send(myHtmlFormattedMail); // Close Script Task with success Dts.TaskResult = (int)ScriptResults.Success; } #region ScriptResults declaration enum ScriptResults { Success = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Success, Failure = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Failure }; #endregion } } 感到满意,那么请尝试以下操作。

awk

第二个解决方案: 使用echo "foo [string] bar" | awk -F"[][]" '{print $2}' 尝试:

sed

第三个​​解决方案:

echo "foo [string] bar"  | sed 's/\([^[]*\)\[\([^]]*\)\(.*\)/\2/' 

第四个解决方案: :考虑到这种情况,您的变量将只有1套echo "foo [string] bar" | awk '{sub(/[^[]*/,"");sub(/\[/,"");sub(/\].*/,"")} 1' [,然后按照最简单的方法进行设置将为您提供帮助。

]

第五个解决方案: 在此处使用echo "foo [string] bar" | sed 's/.*\[//;s/\].*//' 的{​​{1}}功能。

match

答案 1 :(得分:0)

使用adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, arrayList); listview.setAdapter(adapter); //crash (nullpointerexception pointing to nullobject)

grep

如果您的grep支持echo "foo [string] bar" | grep -oP '\[\K[^]]+' string PCRE标志),则可以使用正则表达式捕获-P[之间的内容。
这是命令的详细信息:

]:此标志将告诉grep仅打印匹配的正则表达式,而不打印整个匹配行。
-o:这将启用-P
PCRE\[\K[^]]+将允许在其左侧进行匹配,但不将其视为输出的一部分。 \K的意思是,除了[^]]+

之外,如果还有其他匹配项,请继续进行

答案 2 :(得分:0)

echo "foo [string] bar" | awk '{gsub(/\[|\]/,"");print $2}'
string